Spring Boot 集成 JdbcTemplate 實現多數據源配置
在實際開發中,我們會遇到一個應用需要訪問多個數據源的情況。因此,我們需要配置多個數據源。使用 JdbcTemplate 實現多數據源配置是比較簡單的。
添加相關依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.35</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.14</version>
</dependency>
配置數據源信息
# 數據源一
spring.datasource.druid.one.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.druid.one.url=jdbc:mysql://localhost:3306/game?useUnicode=true&characterEncoding=utf-8
spring.datasource.druid.one.username=root
spring.datasource.druid.one.password=root
# 數據源二
spring.datasource.druid.two.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.druid.two.url=jdbc:mysql://localhost:3306/product?useUnicode=true&characterEncoding=utf-8
spring.datasource.druid.two.username=root
spring.datasource.druid.two.password=root
創建 DataSource 和 JdbcTemplate
數據源一
這裏將數據源一作爲主數據源,並添加 @Primary
註解。
@Configuration
public class DataSourceOneConfig {
@Bean(name = "DataSourceOne")
@Primary
@ConfigurationProperties(prefix = "spring.datasource.druid.one")
public DataSource dataSource() {
return new DruidDataSource();
}
@Bean(name = "JdbcTemplateOne")
@Primary
public JdbcTemplate jdbcTemplate(@Qualifier("DataSourceOne") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
數據源二
@Configuration
public class DataSourceTwoConfig {
@Bean(name = "DataSourceTwo")
@ConfigurationProperties(prefix = "spring.datasource.druid.two")
public DataSource dataSource() {
return new DruidDataSource();
}
@Bean(name = "JdbcTemplateTwo")
public JdbcTemplate jdbcTemplate(@Qualifier("DataSourceTwo") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
編寫 DAO 和 Service
上面的配置工作完成後,接下來編寫數據庫操作的 DAO 類和 Service 類。
數據源一
- 編寫 DAO 類
@Repository
public class UserRepository {
@Autowired
@Qualifier("JdbcTemplateOne") // 由於是多數據源,在注入 JdbcTemplate 時,需指明是哪個數據源的。
private JdbcTemplate jdbcTemplate;
public int insertUser(User user) {
String sql = "INSERT INTO user(username, password) VALUES(?,?)";
int count = jdbcTemplate.update(sql, user.getUsername(), user.getPassword());
return count;
}
}
- 編寫 Service 類
@Service
public class UserService {
private static final Logger logger = LoggerFactory.getLogger(UserService.class);
@Autowired
private UserRepository userRepository;
public void insertUser(User user){
userRepository.insertUser(user);
logger.info("Insert user success");
}
}
數據源二
- 編寫 DAO 類
@Repository
public class ProductRepository {
@Autowired
@Qualifier("JdbcTemplateTwo")
private JdbcTemplate jdbcTemplate;
public Integer insertProduct(Product product) {
String sql = "INSERT INTO product(product_name, price, address) VALUES(?,?,?)";
int count = jdbcTemplate.update(sql, product.getProductName(), product.getPrice(), product.getAddress());
return count;
}
}
- 編寫 Service 類
@Service
public class ProductService {
private static final Logger logger = LoggerFactory.getLogger(ProductService.class);
@Autowired
private ProductRepository productRepository;
public void insertProduct(Product product) {
productRepository.insertProduct(product);
logger.info("Insert product success");
}
}
最後,詳細代碼可以查看本示例的 Demo。
後記
由於自身能力有限,若有錯誤或者不當之處,還請大家批評指正,一起學習交流!
GitHub 源碼地址:springboot-multidatasource-jdbctemplate