使用單個 or 多個資料庫連線設定
單個資料庫連線設定
application.properties
# Database settings
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3308/myjdbc?serverTimezone=Asia/Taipei&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=ji#@k7au$a83
Spring JDBC 自動生成 NamedParameterJdbcTemplate Bean 出來
我們就可以去注入這個bean 然後去使用他的 update 方法 或是 query 方法
去執行相對應的sql 語法
多個資料庫連線設定
application.properties
# 多個資料庫的連線設定
spring.datasource.test1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.test1.url=jdbc:mysql://localhost:3308/test1?serverTimezone=Asia/Taipei&characterEncoding=utf-8
spring.datasource.test1.username=root
spring.datasource.test1.password=ji#@k7au$a83
spring.datasource.test2.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.test2.url=jdbc:mysql://localhost:3308/test2?serverTimezone=Asia/Taipei&characterEncoding=utf-8
spring.datasource.test2.username=root
spring.datasource.test2.password=ji#@k7au$a83
當你想要去連線到多個資料庫的時候
- 必須在這個datasource後面指定說這一組資料庫連線設定 是要連線到哪一個資料庫上
- 單個是
url, 多個是jdbc-url

運作方式

步驟
- application.properties
- 上面有所以略..
- DataSourceConfiguration
- @Configuration Spring Boot設定
- prefix 對應到 application.properties
- @Qualifier 因為有多個所以要指定
package com.example.demo;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import javax.sql.DataSource;
@Configuration
public class DataSourceConfiguration {
// 連線到 test1 資料庫的 DataSource 和 NamedParameterJdbcTemplate
@Bean
@ConfigurationProperties(prefix = "spring.datasource.test1")
public DataSource test1DataSource(){
return DataSourceBuilder.create().build();
}
@Bean
public NamedParameterJdbcTemplate test1JdbcTemplate(
@Qualifier("test1DataSource") DataSource dataSource) {
return new NamedParameterJdbcTemplate(dataSource);
}
// 連線到 test2 資料庫的 DataSource 和 NamedParameterJdbcTemplate
@Bean
@ConfigurationProperties(prefix = "spring.datasource.test1")
public DataSource test2DataSource(){
return DataSourceBuilder.create().build();
}
@Bean
public NamedParameterJdbcTemplate test2JdbcTemplate(
@Qualifier("test2DataSource") DataSource dataSource) {
return new NamedParameterJdbcTemplate(dataSource);
}
}
-
controller
-
@Qualifier("test1JdbcTemplate") 指定bean
package com.example.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
@RestController
public class DataSourceController {
@Autowired
@Qualifier("test1JdbcTemplate") // 指定
private NamedParameterJdbcTemplate test1JdbcTemplate;
@Autowired
@Qualifier("test2JdbcTemplate")
private NamedParameterJdbcTemplate test2JdbcTemplate;
@PostMapping("/test1/students")
public String test1Insert(@RequestBody Student student){
String sqlstr = "insert into student(name) value (:studentName)";
Map<String ,Object> map = new HashMap<>();
map.put("studentName" ,student.getName());
test1JdbcTemplate.update(sqlstr ,map);
return "插入數據到 test1 資料庫";
}
@PostMapping("/test2/students")
public String test2Insert(@RequestBody Student student){
String sqlstr = "insert into student(name) value (:studentName)";
Map<String ,Object> map = new HashMap<>();
map.put("studentName" ,student.getName());
test2JdbcTemplate.update(sqlstr ,map);
return "插入數據到 test1 資料庫";
}
}