Recently, due to project needs, different databases need to be accessed simultaneously in the program. It was really convenient and fast to use springboot annotations to write code before, but if you need to change some of them to facilitate your own use, it is a bit annoying and I don’t know where to start. Write this down.
The first is pom.xml, which is common and will not be posted here.
The second is the application.properties configuration. Because of different environments, the author created two new application-dev.properties and application-pro.properties configuration files.
application.properties: Specify the configuration of the environment currently used.
spring.profiles.active=dev
application-dev.properties的配置(application-pro.properties类似dev的配置)
#datasource1 spring.datasource.username=** spring.datasource.password=***** spring.datasource.jdbc-url=jdbc:mysql://*************** useUnicode=true&characterEncoding=utf-8&useSSL=false spring.datasource.driver-class-name=com.mysql.jdbc.Driver #datasource2 spring.datasource.ds1.username=*** spring.datasource.ds1.password=****** spring.datasource.ds1.jdbc-url=jdbc:mysql://*************** useUnicode=true&characterEncoding=utf-8&useSSL=false spring.datasource.ds1.driver-class-name=com.mysql.jdbc.Drive
MyBatis (Config1) from different data sources
@Configuration @MapperScan(basePackages = "com.pet.petgame2.mapper.dao", sqlSessionFactoryRef = "petgame2SessionFactory") public class Config1 { @Bean(name = "petgame2") @ConfigurationProperties(prefix = "spring.datasource") @Primary public DataSource dataSource(){ return DataSourceBuilder.create().build(); } @Bean(name = "petgame2SessionFactory") @Primary public SqlSessionFactory sessionFactory(@Qualifier("petgame2") DataSource dataSource) throws Exception{ SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); factoryBean.setDataSource(dataSource); factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:Mapper/pet2Mapper/*.xml")); return factoryBean.getObject(); } @Bean(name = "petgame2TransactionManager") @Primary public DataSourceTransactionManager transactionManager(@Qualifier("petgame2") DataSource dataSource){ return new DataSourceTransactionManager(dataSource); } }
MyBatis (Config2) from different data sources
@Configuration @MapperScan(basePackages = "com.pet.petgame2.mapper.dao2", sqlSessionFactoryRef = "petgamesqlSessionFactory") public class Config2 { @Bean(name = "petgame") @ConfigurationProperties(prefix = "spring.datasource.ds1") public DataSource dataSource(){ return DataSourceBuilder.create().build(); } @Bean(name = "petgamesqlSessionFactory") public SqlSessionFactory sessionFactory(@Qualifier("petgame") DataSource dataSource) throws Exception{ SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); factoryBean.setDataSource(dataSource); factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:Mapper/petMapper/*.xml")); return factoryBean.getObject(); } @Bean(name = "petgameTransactionManager") public DataSourceTransactionManager transactionManager(@Qualifier("petgame") DataSource dataSource){ return new DataSourceTransactionManager(dataSource); } }
@MapperScan annotation will automatically scan the mapper interface file, factoryBean.setMapperLocations will scan the Mapper.XML file corresponding to the mapper interface file, be careful not to write the wrong paths to these two. @Primary sets the default database link configuration, and one of the data sources must be specified as the default.
*Note: If you use Hikari that comes with springboot2.0 as the connection pool, you need to pay attention to
spring.datasource.url改为spring.datasource.jdbc-url
in the properties or modify the DataSource in the config to DataSourceProperties, as follows
@Bean(name = "petgame2DataSourceProperties") @Qualifier("petgame2DataSourceProperties") @ConfigurationProperties(prefix = "spring.datasource") @Primary public DataSourceProperties properties(){ return new DataSourceProperties(); } @Bean(name = "petgame2") @ConfigurationProperties(prefix = "spring.datasource") @Primary public DataSource dataSource(){ // return DataSourceBuilder.create().build(); return properties().initializeDataSourceBuilder().build(); }
The above is the detailed content of JAVA development of springBoot2.0 to build dual data sources. For more information, please follow other related articles on the PHP Chinese website!