Spring Boot 入門示例(七):Spring Boot 集成 JdbcTemplate 實現多數據源配置

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章