pom.xml
<!--web应用基本环境配置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- oracle -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.3</version>
</dependency>
<!-- jdbc -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
application.properties
##数据源1
spring.datasource.one.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.one.jdbc-url=jdbc:oracle:thin:@192.168.1.201:1521:orcl
spring.datasource.one.username=root
spring.datasource.one.password=root
##数据源2
spring.datasource.two.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.two.jdbc-url=jdbc:oracle:thin:@192.168.1.202:1521:orcl
spring.datasource.two.username=root
spring.datasource.two.password=root
DataSourceConfig
@Configuration
public class DataSourceConfig {
@Bean
@Primary
@ConfigurationProperties("spring.datasource.one")
DataSource dsOne() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties("spring.datasource.two")
DataSource dsTwo() {
return DataSourceBuilder.create().build();
}
@Primary//系统应该默认执行该方法,如获取时不指定名称,则默认获取这个数据源,如果不添加,则启动时候会报错
@Bean("jdbcTemplateOne")
JdbcTemplate jdbcTemplateOne(@Qualifier("dsOne") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
@Bean("jdbcTemplateTwo")
JdbcTemplate jdbcTemplateTwo(@Qualifier("dsTwo") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
注入方式
//@Autowired默认按类型装配,如果想使用名称装配可以结合@Qualifier注解进行使用。
//@Resource,默认按照名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行名称查找。
@Resource
private JdbcTemplate jdbcTemplateOne;
@Resource
private JdbcTemplate jdbcTemplateTwo;
注意事项
当存在多个相同类型的Bean,例如,多个DataSource
,多个JdbcTemplate
时,强烈建议总是使用@Primary
把其中某一个Bean标识为“主要的”,使用@Autowired
注入时会首先使用被标记为@Primary
的Bean。
相同类型的其他Bean,每一个都需要用@Bean(name="xxx")
标识名字,并且,在使用@Autowired
注入时配合@Qualifier("xxx")
指定注入的Bean的名字。