我遇到了一个问题,我一直在做很多搜索但仍未找到答案。我们在一个URL包含多个数据库模式,包括模式的测试副本(例如,模式1,模式2,模式1_测试,模式2_测试都在同一个网址)。我试图通过一个属性文件来配置每个模式的哪个版本。从属性文件中获取模式名称
我们正在使用Spring和MyBatis的,可惜我是新来的两个(所以请原谅我的无知或任何错误我做描述了这个问题!)
所以在我的Spring配置文件,这是在/ src目录/主/资源存储,我有以下摘录: (我只加“configLocation”属性,后来加入“sqlSessionFactoryBeanName”属性)
<!-- define the SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="typeAliasesPackage" value="com.example.domain" />
<property name="configLocation" value="classpath:mybatisConfig.xml" />
</bean>
<!-- scan for mappers and let them be autowired -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.example.something.persistence" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
我mybatisConfig.xml(这是根据存储/ SRC /米AIN /资源,这应该是在类路径)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="sqlmapconfig.properties" />
</configuration>
sqlmapconfig.properties(在同一文件夹)
schema1=schema1_test
我尝试引用属性映射器中的一个文件在com.example.something.persistence:
<select id="test" resultType="result" parameterType="long">
select ${schema1}.table.col
from ${schema1}.table
</select>
当我尝试用Maven构建失败一个TE ST:
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'schema1' in 'class java.lang.Long'
任何建议,将不胜感激!
”存储在/ src/main/resources下,它应该在类路径中“<==你能证实这种情况吗?你在类路径中是否有文件夹“/ src/main/resources”,或者你的内部版本是否在某处复制? – 2012-03-23 15:07:41
是的,它在类路径上。它是一个将被部署到tomcat服务器的web应用程序。 [编辑 - 错误提交] 即使我拿出classpath部分并将其保留为相对url链接(它们在同一个文件夹中),它不会改变任何内容。 是否有任何中间步骤可以读取{$ schema1}来缩小问题的位置? – witnessmenow 2012-03-23 15:19:46
我发现你指定了配置的属性文件,但在你的映射器文件中使用了属性引用。据我所知,这些属性不会传递给映射器文件。 你使用了哪个数据库?你能在你的JDBC URL中指定模式吗? – 2012-03-23 15:53:39