1.配置文件配置多数据源(本人spring boot版本2.0以上)

2.java配置多个数据源java配置自动化
- His数据源配置
package com.example.storagefunction.conf; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.DependsOn; import org.springframework.context.annotation.Primary; import org.springframework.core.env.Environment; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import javax.sql.DataSource; @Configuration @MapperScan(basePackages = "com.example.storagefunction.mapper.his", sqlSessionTemplateRef = "hisSqlSessionTemplate") public class HisDataSourceConfig { /** * 根据application.properteis系统配置文件中,对应属性的前缀,指明使用其对应的数据 */ @Bean @ConfigurationProperties(prefix = "spring.datasource.hikari.his") @Primary public DataSource hisDataSource() { return DataSourceBuilder.create().build(); } @Bean @DependsOn("hisDataSource") @Primary public SqlSessionFactory hisSqlSessionFactory() throws Exception { SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); factoryBean.setDataSource(hisDataSource()); factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("com/example/storagefunction/mapping/*.xml")); return factoryBean.getObject(); } /** * DefaultSqlSession和SqlSessionTemplate都实现了SqlSession,但我们 * 注入线程安全的SqlSessionTemplate,而不使用默认的线程不安全的DefaultSqlSession */ @Bean @DependsOn("hisSqlSessionFactory") @Primary public SqlSessionTemplate hisSqlSessionTemplate() throws Exception { return new SqlSessionTemplate(hisSqlSessionFactory()); } } - Pacs数据源配置
package com.example.storagefunction.conf;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.example.storagefunction.mapper.pacs", sqlSessionTemplateRef = "pacsSqlSessionTemplate")
public class PacsDataSourceConfig {
/**
* 根据application.properteis系统配置文件中,对应属性的前缀,指明使用其对应的数据
*/
@Bean
@ConfigurationProperties(prefix = "spring.datasource.hikari.pacs")
public DataSource pacsDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@DependsOn("pacsDataSource")
public SqlSessionFactory pacsSqlSessionFactory() throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(pacsDataSource());
factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("com/example/storagefunction/mapping/*.xml"));
return factoryBean.getObject();
}
/**
* DefaultSqlSession和SqlSessionTemplate都实现了SqlSession,但我们
* 注入线程安全的SqlSessionTemplate,而不使用默认的线程不安全的DefaultSqlSession
*/
@Bean
@DependsOn("pacsSqlSessionFactory")
public SqlSessionTemplate pacsSqlSessionTemplate() throws Exception {
return new SqlSessionTemplate(pacsSqlSessionFactory());
}
}
3.多个数据源的mapper文件区分开(目的能在多数据源装配的时候定位哪些mapper对应哪个数据源)

4.本人遇到的坑Invalid bound statement (not found):
1.出现这个问题检查.xml文件的namespace 与mapper路径对应的上不
2.如果上面不能解决,检查多数据源配置装配那里配置的.xml扫描路径对不
5.jdbcUrl is required with driverClassName.如果出现这个错是因为2.0版本配置多数据源需要用hikari链接池,如果用的1.0左右版本请在多数据源配置哪里。指定链接,用户名等等
本文详细介绍了在SpringBoot 2.0以上版本中如何配置多数据源,包括His和Pacs数据源的具体配置步骤,以及在配置过程中可能遇到的问题和解决方案,如Invalid bound statement错误排查和jdbcUrl配置要求。
2580

被折叠的 条评论
为什么被折叠?



