1. 程式人生 > 其它 >SSM2.1【Spring:Spring配置資料來源】

SSM2.1【Spring:Spring配置資料來源】

資料來源(資料庫連線池)的作用

資料來源的開發步驟

資料來源的手動建立 VS Spring配置資料來源

雖然將資料庫基本連線資訊配置到applicationContext.xml中已經完成解耦合,但是實際開發中方便資料庫的管理,同樣會將資料庫的基本連線資訊單獨抽取到一個properties檔案中 

程式碼

pom.xml

 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.haifei</groupId> 8 <artifactId>SSM2_spring_ioc_anno</artifactId> 9 <version>1.0-SNAPSHOT</
version> 10 11 12 <dependencies> 13 <dependency> 14 <groupId>org.springframework</groupId> 15 <artifactId>spring-context</artifactId> 16 <version>5.0.5.RELEASE</version> 17 </dependency> 18 <
dependency> 19 <groupId>junit</groupId> 20 <artifactId>junit</artifactId> 21 <version>4.11</version> 22 </dependency> 23 <dependency> 24 <groupId>mysql</groupId> 25 <artifactId>mysql-connector-java</artifactId> 26 <version>5.1.26</version> 27 </dependency> 28 <dependency> 29 <groupId>c3p0</groupId> 30 <artifactId>c3p0</artifactId> 31 <version>0.9.1.2</version> 32 </dependency> 33 <dependency> 34 <groupId>com.alibaba</groupId> 35 <artifactId>druid</artifactId> 36 <version>1.0.9</version> 37 </dependency> 38 </dependencies> 39 40 41 <build> 42 <plugins> 43 <plugin> 44 <groupId>org.apache.maven.plugins</groupId> 45 <artifactId>maven-compiler-plugin</artifactId> 46 <version>3.1</version> 47 <configuration> 48 <target>1.8</target> 49 <source>1.8</source> 50 </configuration> 51 </plugin> 52 </plugins> 53 </build> 54 55 56 </project>

jdbc.properties

1 jdbc.driver=com.mysql.jdbc.Driver
2 jdbc.url=jdbc:mysql://localhost:3306/test
3 jdbc.username=root
4 jdbc.password=root

applicationContext.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xmlns:context="http://www.springframework.org/schema/context"
 5        xsi:schemaLocation="
 6        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 7        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
 8 
 9 
10     <bean id="dataSource_c3p0" class="com.mchange.v2.c3p0.ComboPooledDataSource">
11         <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
12         <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"></property>
13         <property name="user" value="root"></property>
14         <property name="password" value="root"></property>
15     </bean>
16 
17     <!--載入外部的properties檔案-->
18     <!--需要在頂部beans中配置名稱空間context,並在xsi中新增對應的約束路徑-->
19     <context:property-placeholder location="classpath:jdbc.properties"/>
20     <bean id="dataSource_druid" class="com.alibaba.druid.pool.DruidDataSource">
21         <property name="driverClassName" value="${jdbc.driver}"></property>
22         <property name="url" value="${jdbc.url}"></property>
23         <property name="username" value="${jdbc.username}"></property>
24         <property name="password" value="${jdbc.password}"></property>
25     </bean>
26 
27 
28 </beans>

DataSourceTest.java

  1 package com.haifei.test;
  2 
  3 import com.alibaba.druid.pool.DruidDataSource;
  4 import com.mchange.v2.c3p0.ComboPooledDataSource;
  5 import org.junit.Test;
  6 import org.springframework.context.ApplicationContext;
  7 import org.springframework.context.support.ClassPathXmlApplicationContext;
  8 
  9 import javax.sql.DataSource;
 10 import java.beans.PropertyVetoException;
 11 import java.sql.Connection;
 12 import java.util.ResourceBundle;
 13 
 14 public class DataSourceTest {
 15 
 16     /**
 17      * 手動建立c3p0資料來源(資料庫連線池)
 18      */
 19     @Test
 20     public void test1() throws Exception {
 21         ComboPooledDataSource dataSource = new ComboPooledDataSource();
 22         dataSource.setDriverClass("com.mysql.jdbc.Driver");
 23         dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");
 24         dataSource.setUser("root");
 25         dataSource.setPassword("root");
 26 
 27         Connection connection = dataSource.getConnection();
 28         System.out.println(connection); //com.mchange.v2.c3p0.impl.NewProxyConnection@129a8472
 29         connection.close(); //歸還連線到連線池中
 30     }
 31 
 32 
 33     /**
 34      * 手動建立druid資料來源
 35      */
 36     @Test
 37     public void test2() throws Exception {
 38         DruidDataSource dataSource = new DruidDataSource();
 39         dataSource.setDriverClassName("com.mysql.jdbc.Driver");
 40         dataSource.setUrl("jdbc:mysql://localhost:3306/test");
 41         dataSource.setUsername("root");
 42         dataSource.setPassword("root");
 43 
 44         Connection connection = dataSource.getConnection();
 45         System.out.println(connection); //com.mysql.jdbc.JDBC4Connection@2471cca7
 46         connection.close();
 47     }
 48 
 49 
 50     /**
 51      * 手動建立c3p0資料來源(載入properties配置檔案方式)
 52      *    抽取為配置檔案,方便解耦
 53      */
 54     @Test
 55     public void test3() throws Exception {
 56         //讀取配置檔案
 57         ResourceBundle rb = ResourceBundle.getBundle("jdbc"); //該方法專門讀取.properties檔案,引數僅傳入檔名即可
 58         String driver = rb.getString("jdbc.driver");
 59         String url = rb.getString("jdbc.url");
 60         String username = rb.getString("jdbc.username");
 61         String password = rb.getString("jdbc.password");
 62 //        System.out.println(driver + "--" + url + "--" + username + "--" + password); //com.mysql.jdbc.Driver--jdbc:mysql://localhost:3306/test--root--root
 63 
 64         //建立資料來源物件,設定連線引數
 65         ComboPooledDataSource dataSource = new ComboPooledDataSource();
 66         dataSource.setDriverClass(driver);
 67         dataSource.setJdbcUrl(url);
 68         dataSource.setUser(username);
 69         dataSource.setPassword(password);
 70         /*
 71         Spring依賴注入(配置Bean)
 72             bean的class值來源:右鍵ComboPooledDataSource,copy referrnce 得到其全路徑
 73             屬性property的name值來源:setXyyy --> Xyyy --> xyyy
 74          */
 75 
 76         Connection connection = dataSource.getConnection();
 77         System.out.println(connection); //com.mchange.v2.c3p0.impl.NewProxyConnection@1b0375b3
 78         connection.close();
 79     }
 80 
 81 
 82     /**
 83      * 手動建立druid資料來源(載入properties配置檔案方式)
 84      *  抽取為配置檔案,方便解耦
 85      */
 86     @Test
 87     public void test4() throws Exception {
 88         ResourceBundle rb = ResourceBundle.getBundle("jdbc");
 89         String driver = rb.getString("jdbc.driver");
 90         String url = rb.getString("jdbc.url");
 91         String username = rb.getString("jdbc.username");
 92         String password = rb.getString("jdbc.password");
 93 
 94         DruidDataSource dataSource = new DruidDataSource();
 95         dataSource.setDriverClassName(driver);
 96         dataSource.setUrl(url);
 97         dataSource.setUsername(username);
 98         dataSource.setPassword(password);
 99 
100         Connection connection = dataSource.getConnection();
101         System.out.println(connection); //com.mysql.jdbc.JDBC4Connection@5fe5c6f
102         connection.close();
103     }
104 
105 
106     /**
107      * Spring容器產生c3p0資料來源物件
108      */
109     @Test
110     public void test5() throws Exception {
111         ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
112 
113 //        ComboPooledDataSource dataSource = (ComboPooledDataSource)app.getBean("dataSource_c3p0");
114 //        DataSource dataSource = (DataSource)app.getBean("dataSource_c3p0");
115 
116         //因為此時spring配置檔案只配置了一個class="com.mchange.v2.c3p0.ComboPooledDataSource",所以該可以:
117         ComboPooledDataSource dataSource = app.getBean(ComboPooledDataSource.class);
118 //        DataSource dataSource = app.getBean(DataSource.class); //報錯
119 
120         Connection connection = dataSource.getConnection();
121         System.out.println(connection);
122         connection.close();
123     }
124 
125 
126     /**
127      * Spring容器產生druid資料來源物件
128      *  採用載入外部的properties檔案的方式配置bean
129      */
130     @Test
131     public void test6() throws Exception {
132         ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
133 
134 //        DruidDataSource dataSource = (DruidDataSource)app.getBean("dataSource_druid");
135         DruidDataSource dataSource = app.getBean(DruidDataSource.class);
136 
137         Connection connection = dataSource.getConnection();
138         System.out.println(connection);
139         connection.close();
140     }
141 
142 }