您的位置 首页 java

解决在jenkins上部署Java项目mybatis配置文件中的占位符失效问题

一、具体问题如下

jenkins 上部署Java项目时mybatis配置文件中的占位符失效(此占位符读取在apollo配置中心配置的dataSourceConfig.properties[数据源属性配置文件])。

二、出现问题的原因及解决方法

在spring里使用org.mybatis.spring.mapper.MapperScannerConfigurer进行自动扫描的时候,设置了sql sessionFactory 的话,可能会导PropertyPlaceholderConfigurer失效,也就是用${ jdbc .username}这样之类的表达式,将无法获取到properties文件里的内容。导致这一原因是因为MapperScannerConfigurer实际是在解析加载bean定义阶段的,这个时候要是设置sqlSessionFactory的话,会导致提前初始化一些类,这个时候PropertyPlaceholderConfigurer还没来得及替换定义中的变量,导致把表达式当做 字符串 复制了。

但是如果不设置sqlSessionFactory属性的话,就必须要保证sessionFactory在spring中名称一定要是sqlSessionFactory,否则就无法自动注入。又或者直接定义MapperFactoryBean,再或者放弃自动代理接口方式。

2、解决方法

<bean class=”org.mybatis.spring.mapper.MapperScannerConfigurer”>

<property name=”basePackage” value=”com.test.dao” />

<property name=” sql SessionFactory” value=”sqlSessionFactory” />

</bean>

将上面配置中的

<property name=”sqlSessionFactory” value=”sqlSessionFactory” />

替换为

<property name=”sqlSessionFactoryBeanName” value=”sqlSessionFactory” />

即可。

三、总结

改用sqlSessionFactoryBeanName注入就没有问题(不要使用sqlSessionFactory属性注入,使用sqlSessionFactoryBeanName注入),因为这时不会立即初始化sqlSessionFactory,传入的只是名字,非bean,所以不会引发提前初始化问题。

经测试验证 Java 项目在jenkins上部署成功,上述问题得以解决。有什么不妥之处,还望大家评论指正。

文章来源:智云一二三科技

文章标题:解决在jenkins上部署Java项目mybatis配置文件中的占位符失效问题

文章地址:https://www.zhihuclub.com/196648.shtml

关于作者: 智云科技

热门文章

网站地图