【SpringBoot】SpringBoot 配置JDBC數據源(十二)


  本例介紹SpringBoot與數據源的使用

JDBC

  1、新建一個項目SpringBoot Web項目,引入JDBC相關jar包。SpringBoot版本是:2.1.8.RELEASE,pom文件如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <modelVersion>4.0.0</modelVersion>
 6 
 7     <groupId>com.test</groupId>
 8     <artifactId>test-springboot-jdbc</artifactId>
 9     <version>1.0-SNAPSHOT</version>
10 
11     <parent>
12         <groupId>org.springframework.boot</groupId>
13         <artifactId>spring-boot-starter-parent</artifactId>
14         <version>2.1.8.RELEASE</version>
15     </parent>
16 
17     <properties>
18 
19         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
20         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
21         <java.version>1.8</java.version>
22     </properties>
23 
24     <dependencies>
25 
26         <dependency>
27             <groupId>org.springframework.boot</groupId>
28             <artifactId>spring-boot-starter-web</artifactId>
29         </dependency>
30 
31         <!-- mysql -->
32         <dependency>
33             <groupId>org.springframework.boot</groupId>
34             <artifactId>spring-boot-starter-jdbc</artifactId>
35         </dependency>
36 
37         <!-- mysql -->
38         <dependency>
39             <groupId>mysql</groupId>
40             <artifactId>mysql-connector-java</artifactId>
41             <version>8.0.12</version>
42         </dependency>
43 
44         <dependency>
45             <groupId>org.springframework.boot</groupId>
46             <artifactId>spring-boot-starter-test</artifactId>
47             <scope>test</scope>
48         </dependency>
49 
50     </dependencies>
51 
52 
53     <!-- SpringBoot打包插件,可以將代碼打包成一個可執行的jar包 -->
54     <build>
55         <plugins>
56             <plugin>
57                 <groupId>org.springframework.boot</groupId>
58                 <artifactId>spring-boot-maven-plugin</artifactId>
59             </plugin>
60         </plugins>
61     </build>
62 </project>

  2、配置數據源

1 spring:
2   datasource:
3     username: admin
4     password: 123456
5     url: jdbc:mysql://127.0.0.1:3306/test
6     driver-class-name: com.mysql.jdbc.Driver

  3、編輯測試JDBC代碼,如下:

 1 package com.test.springboot;
 2 
 3 import com.mysql.jdbc.Driver;
 4 import org.junit.Test;
 5 import org.junit.runner.RunWith;
 6 import org.springframework.beans.factory.annotation.Autowired;
 7 import org.springframework.boot.test.context.SpringBootTest;
 8 import org.springframework.jdbc.core.JdbcTemplate;
 9 import org.springframework.test.context.junit4.SpringRunner;
10 
11 import javax.sql.DataSource;
12 import java.sql.Connection;
13 import java.sql.PreparedStatement;
14 import java.sql.ResultSet;
15 import java.sql.SQLException;
16 import java.util.List;
17 import java.util.Map;
18 
19 @RunWith(SpringRunner.class)
20 @SpringBootTest
21 public class TestApplication {
22 
23     @Autowired
24     private DataSource dataSource;
25     
26     @Autowired
27     private JdbcTemplate jdbcTemplate;
28 
29     @Test
30     public void context() throws SQLException {
31         System.out.println("========");
32         System.out.println("dataSource ====" + dataSource);
33 
34         Connection connection = dataSource.getConnection();
35         System.out.println("connecttion ====" + connection);
36 
37         List<Map<String, Object>> maps = jdbcTemplate.queryForList("select * from user");
38         System.out.println(maps);
39     }
40 
41 }

  4、測試: 

    

    效果: 默認是用com.zaxxer.hikari.HikariDataSource作為數據源; 數據源的相關配置都在DataSourceProperties里面;

 數據自動配置原理

  通過參考org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration類,可以看到自動配置內容

  1、參考DataSourceConfiguration,根據配置創建數據源,默認使用HikariDataSource連接池;可以使用 spring.datasource.type指定自定義的數據源類型;

  2、SpringBoot默認可以支持:

    org.apache.tomcat.jdbc.pool.DataSource、HikariDataSource、BasicDataSource

  3、自定義數據源類型

 1 /**
 2  * Generic DataSource configuration.
 3  */
 4 @Configuration
 5 @ConditionalOnMissingBean(DataSource.class)
 6 @ConditionalOnProperty(name = "spring.datasource.type")
 7 static class Generic {
 8 
 9     @Bean
10     public DataSource dataSource(DataSourceProperties properties) {
11 
12         //使用DataSourceBuilder創建數據源,利用反射創建響應type的數據源,並且綁定相關屬性
13         return properties.initializeDataSourceBuilder().build();
14     }
15 
16 }

  4、操作數據庫:自動配置了JdbcTemplate操作數據庫

整合Druid數據源

  1、引入druid數據源依賴

<!--引入druid數據源-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.8</version>
</dependency>

  2、編輯Druid數據源配置類

 1 package com.test.springboot.config;
 2 
 3 import com.alibaba.druid.pool.DruidDataSource;
 4 import com.alibaba.druid.support.http.StatViewServlet;
 5 import com.alibaba.druid.support.http.WebStatFilter;
 6 import org.springframework.boot.context.properties.ConfigurationProperties;
 7 import org.springframework.boot.web.servlet.FilterRegistrationBean;
 8 import org.springframework.boot.web.servlet.ServletRegistrationBean;
 9 import org.springframework.context.annotation.Bean;
10 import org.springframework.context.annotation.Configuration;
11 
12 import javax.sql.DataSource;
13 import java.util.Arrays;
14 import java.util.HashMap;
15 import java.util.Map;
16 
17 @Configuration
18 public class DruidConfig {
19 
20     @ConfigurationProperties(prefix = "spring.datasource")
21     @Bean
22     public DataSource druid(){
23        return  new DruidDataSource();
24     }
25 
26     //配置Druid的監控
27     //1、配置一個管理后台的Servlet
28     @Bean
29     public ServletRegistrationBean statViewServlet(){
30         ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
31         Map<String,String> initParams = new HashMap<>();
32 
33         // 后台用戶名
34         initParams.put("loginUsername","admin");
35         // 后台密碼
36         initParams.put("loginPassword","123456");
37         //默認就是允許所有訪問
38         initParams.put("allow","");
39         // 拒接訪問
40         initParams.put("deny","192.168.1.3");
41 
42         bean.setInitParameters(initParams);
43         return bean;
44     }
45 
46 
47     //2、配置一個web監控的filter
48     @Bean
49     public FilterRegistrationBean webStatFilter(){
50         FilterRegistrationBean bean = new FilterRegistrationBean();
51         bean.setFilter(new WebStatFilter());
52 
53         Map<String,String> initParams = new HashMap<>();
54         initParams.put("exclusions","*.js,*.css,*.png,*.jpg,/druid/*");
55 
56         bean.setInitParameters(initParams);
57 
58         bean.setUrlPatterns(Arrays.asList("/*"));
59 
60         return  bean;
61     }
62 }

  3、啟動web項目。瀏覽器輸入地址:http://localhost:8080/druid/,進行訪問

    

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM