1. 程式人生 > >SpringBoot配置資料來源DataSource

SpringBoot配置資料來源DataSource

  • 使用properties檔案配置springboot預設資料來源

    這種方式十分簡單,只用在application.properties檔案中配置資料庫連線屬性即可。

spring.datasource.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8&characterSetResults=utf8&autoReconnect=true&failOverReadOnly=false
spring.datasource.username=root
spring.datasource.password=root

   執行測試方法,檢視springboot是否自動配置資料來源

@RunWith(SpringRunner.class)
@SpringBootTest
public class MonsterlanApplicationTests {
   @Autowired
DataSourceProperties dataSourceProperties;
@Autowired
ApplicationContext applicationContext;
@Test
public void contextLoads() {
      // 獲取配置的資料來源
DataSource dataSource = applicationContext
.getBean(DataSource.class); // 檢視配置資料來源資訊 System.out.println(dataSource); System.out.println(dataSource.getClass().getName()); System.out.println(dataSourceProperties); //執行SQL,輸出查到的資料 JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); List<?> resultList = jdbcTemplate.queryForList("select
* from test"); System.out.println("===>>>>>>>>>>>" + JSON.toJSONString(resultList)); } }

通過輸出資訊,我們可以看到我們通過properties檔案配置資料來源十分方便,springboot會直接在容器中構建一個dataSource供我們使用。

  • 通過註解配置資料來源DataSource

    通過註解配置datasource,這個比使用springboot預設的資料來源配置要更靈活一些,還可以根據專案需求配置多個不同的DataSource(如果專案使用到多個數據庫)

    在properties檔案中配置資料庫屬性

spring.datasource.other.jdbc-url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8&characterSetResults=utf8&autoReconnect=true&failOverReadOnly=false
spring.datasource.other.username=root
spring.datasource.other.password=root
spring.datasource.other.driver-class-name=com.mysql.jdbc.Driver

這裡有個注意事項:

    springboot 2.0+中使用jdbc-url配置資料庫URL, 1.5中使用url,不然會導致一個錯誤。jdbcUrl is required with driverClassName

建立一個配置類DataSourceConfig

@Configuration
public class DataSourceConfig {

    @Bean(name = "myDataSource")
    @Qualifier("myDataSource")    @ConfigurationProperties(prefix="spring.datasource.other")
    public DataSource getMyDataSource(){
        return DataSourceBuilder.create().build();
}
    
}

    通過Junit測試資料來源

@RunWith(SpringRunner.class)
@SpringBootTest
public class MonsterlanApplicationTests {
   @Autowired
DataSourceProperties dataSourceProperties;
@Autowired
ApplicationContext applicationContext;
@Resource(name = "myDataSource")
   private DataSource myDataSource;
@Test
public void contextLoads() {
      //執行SQL,輸出查到的資料
JdbcTemplate jdbcTemplate = new JdbcTemplate(myDataSource);
List<?> resultList = jdbcTemplate.queryForList("select * from menu");
System.out.println("===>>>>>>>>>>>" + JSON.toJSONString(resultList));
}
}
這樣我們就能使用資料來源進行資料庫操作了。

相關maven依賴配置:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- Mysql驅動包 -->
<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- alibaba JSON工具 -->
<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>fastjson</artifactId>
   <version>1.2.4</version>
</dependency>