JdbcTemplate多数据源详解
创建数据库:
创建两个数据库⽤来测试,分别为database1和database2。在两个数据库中都创建⼀张book表。
添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.20</version>
</dependency>
druid-spring-boot-starter:数据库连接池依赖,帮助开发者在spring boot项⽬中轻松集成Druid数据库连接池和监控配置数据库连接:
#数据源1
jdbctemplate查询一条数据pe=com.alibaba.druid.pool.DruidDataSource
username=root
password=root
url=jdbc:mysql://localhost:3306/chapter05-1?characterEncoding=utf8&serverTimezone=UTC
#数据源2
spring.pe=com.alibaba.druid.pool.DruidDataSource
spring.datasource.two.username=root
spring.datasource.two.password=root
spring.datasource.two.url=jdbc:mysql://localhost:3306/chapter05-2?characterEncoding=utf8&serverTimezone=UTC
配置两个数据源,数据库不同,其他相同
配置数据源:
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import org.t.properties.ConfigurationProperties;
import t.annotation.Bean;
import t.annotation.Configuration;
import javax.sql.DataSource;
@Configuration
public class DataSourceConfig {
@Bean
@ConfigurationProperties("")
DataSource dsOne() {
ate().build();
}
@Bean
@ConfigurationProperties("spring.datasource.two")
DataSource dsTwo() {
ate().build();
}
}
代码解释:
@Configuration:@Configuration注解的使⽤
@ConfigurationProperties:将配置⽂件(application.yaml)的每个属性值,映射到这个组件中。告诉Springboot将本类中的所有属性和配置⽂件中的配置进⾏绑定。此处表⽰使⽤不同前缀的配置⽂件来创建不同的DataSource实例
@Bean:此注解⽤于告诉⽅法,产⽣⼀个Bean对象,然后这个Bean对象交给Spring管理。产⽣这个Bean对象的⽅法会调⽤⼀次,随后这个Spring将会将这个Bean对象放在⾃⼰的IOC容器中。SpringIOC容器管理⼀个或多个bean,这些bean都需要在
@Configuration注解下进⾏创建,在⼀个⽅法上使⽤@Bean注解就表明这个⽅法需要交给Spring进⾏管理
实体类:
import lombok.Data;
@Data
public class Book {
private Integer id;
private String name;
private String author;
}
配置JdbcTemplate:
在配置多数据源时,需要⾃⼰提供JdbcTemplate实例:
import org.springframework.beans.factory.annotation.Qualifier;
import t.annotation.Bean;
import t.annotation.Configuration;
import org.JdbcTemplate;
import javax.sql.DataSource;
@Configuration
public class JdbcTemplateConfig {
@Bean
JdbcTemplate jdbcTemplateOne(@Qualifier("dsOne") DataSource dataSource){
return new JdbcTemplate(dataSource);
}
@Bean
JdbcTemplate jdbcTemplateTwo(@Qualifier("dsTwo") DataSource dataSource){
return new JdbcTemplate(dataSource);
}
}
代码解释:
JdbcTemplateConfig中提供两个JdbcTemplate实例。每个JdbcTemplate实例都需要提供DataSource,由于Spring容器中有两个DataSource实例,因此需要通过⽅法名查。
@Qualifier注解表⽰查不同名称的DataSource实例注⼊进来
Controller层:
ample.demo.domain.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.BeanPropertyRowMapper;
import org.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
@RestController
public class BookController {
@Resource(name = "jdbcTemplateOne")
JdbcTemplate jdbcTemplateOne;
@Autowired
@Qualifier("jdbcTemplateTwo")
JdbcTemplate jdbcTemplateTwo;
@GetMapping("/test1")
public void test1(){
List<Book> book1 = jdbcTemplateOne.query("select * from book",new BeanPropertyRowMapper<>(Book.class));
List<Book> book2 = jdbcTemplateTwo.query("select * from book",new BeanPropertyRowMapper<>(Book.class));
System.out.println("book1:"+book1);
System.out.println("book2:"+book2);
}
}
在Controller中注⼊两个不同的JdbcTemplate有两种⽅式:⼀是使⽤@Resource注解,并指明name属性,即按name进⾏装配,此时会根据实例名查相应的实例注⼊;另⼀种时使⽤@Autowored注解结合@Qualifiler注解,效果等同于使⽤@Resource注解。
测试:
启动系统,访问地址:
127.0.0.1:8080/test1
控制台输出:
book1:[Book(id=1, name=⽔浒传, author=施耐庵)]
book2:[Book(id=1, name=三国演义, author=罗贯中)]
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论