Spring boot連接mysql數據庫啓動

說到數據庫配置,我們最開始想象的也就是JDBC連接。

1、首先,我們得準備mysql的驅動jar包

Spring boot連接mysql數據庫啓動

2、得有數據庫

Spring boot連接mysql數據庫啓動

3、使用JDBC連接mysql數據庫demo

    //JDBC驅動名
                String JDBC_DRIVER = "com.mysql.jdbc.Driver";
                //數據庫URL:這裏的mysql2020是數據庫名稱
                String JDBC_URL = "jdbc:mysql://localhost:3306/mysql2020?useSSL=false&serverTimezone=UTC";
                //數據庫的用戶名與密碼
                String USER = "root";
                String PASS = "123456";
                //通過DriverManager類獲得該連接對象才能訪問數據庫
                Connection connection = null;
                //通過Connection獲得該結果對象用於執行靜態的SQL語句
                Statement statement = null;
                try {
                        //註冊JDBC驅動
                        Class.forName(JDBC_DRIVER);
                        //數據庫的連接:通過DriverManager類的getConnection方法,傳入三個參數:數據庫URL、用戶名、用戶密碼,實例化connection對象
                        connection = DriverManager.getConnection(JDBC_URL,USER,PASS);
                        //實例化statement對象
                        statement = (Statement) connection.createStatement();
                        //定義數據庫查詢語句:查詢ceshi表中的uuid、Address兩列數據
                        String sql = "SELECT uuid,Address FROM ceshi";
                        //執行查詢語句
                        ResultSet rSet = statement.executeQuery(sql);
                        //展開查詢到的數據
                        while(rSet.next()) {
                                //這裏getString()方法中的參數對應的是數據庫表中的列名
                                String get_name = rSet.getString("uuid");
                                String get_sex = rSet.getString("Address");
                                //輸出數據
                                System.out.println("主鍵:"+get_name);
                                System.out.print("地址:"+get_sex);
                        }
                        //依次關閉對象
                        rSet.close();
                        statement.close();
                        connection.close();
                } catch (Exception e) {
                        e.printStackTrace();
                }

4、演示

Spring boot連接mysql數據庫啓動

使用配置文件

既然要使用配置文件,那肯定得做那種啓動項目的了。
這裏咱們先參照《Spring Boot的啓動與調用》
再,做一下拓展。

1、在開發過程中最重要的就是單元測試了
【配置文件】在pom.xml包中添加下面的依賴

     <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-test</artifactId>
                    <scope>test</scope>
    </dependency>

  
【開發測試類】

在測試類的頭部添加:
@RunWith(SpringRunner.class)
@SpringBootTest註解,
在測試方法的頂端添加@Test即可,最後在方法上點擊右鍵run就可以運行。

 
demo

    package redant;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.test.context.SpringBootTest;
    @SpringBootTest
    public class FrozenWebApplication {
            public static void main(String[] args) {
                    SpringApplication.run(FrozenWebApplication.class, args);
            }
    }

    package mysqlt;
    import org.junit.Test;
    import java.util.Date;
    public class SpringbootTestDemo {
            @Test
            public void springboottestFroze(){
                    for (int i = 0; i < 3; i++) {
                            Date date = new Date();
                            System.out.println(date.getTime());
                    }
            }
    }

演示demo

Spring boot連接mysql數據庫啓動

 【PS】
spring-boot-starter-test提供很多基礎方法,包括增加了對Controller層測試的支持。
2、集成測試
  
  整體開發完成之後進入集成測試,spring boot項目的啓動入口在 Application類中,直接運行run方法就可以啓動項目,但是在調試的過程中我們肯定需要不斷的去調試代碼,如果每修改一次代碼就需要手動重啓一次服務就很麻煩,spring boot非常貼心的給出了熱部署的支持,很方便在web項目中調試使用。
 pom需要添加以下的配置:

        <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools<http://www.yigouyule2.cn/ /artifactId>
                <optional>true</optional>
        </dependency>

    
  添加以上配置後,項目就支持了熱部署,非常方便集成測試。
  
  3、項目上線
  一般分爲三種;一種是打包成jar包直接執行,另一種是打包成war包放到tomcat服務器下,還有就是直接鏈接項目文件。
  A、打成jar包
  如果你使用的是maven來管理項目,執行以下命令既可以
  cd 項目跟目錄(和pom.xml同級)
  mvn clean package
   或者執行下面的命令,排除測試代碼後進行打包
  mvn clean package -Dmaven.test.skip=true
  打包完成後jar包會生成到target目錄下,命名一般是 項目名+版本號.jar 
  啓動jar包命令
  java -jar target/spring-boot-scheduler-1.0.0.jar 
  這種方式,只要控制檯關閉,服務就不能訪問了。下面我們使用在後臺運行的方式來啓動:
  nohup java -jar target/spring-boot-scheduler-1.0.0.jar & 
  也可以在啓動的時候選擇讀取不同的配置文件 
  java -jar app.jar --spring.profiles.active=dev 
  gradle 
  如果使用的是gradle,使用下面命令打包 
  gradle build 
  java -jar build/libs/mymodule-0.0.1-SNAPSHOT.jar 
  打成war包
  打成war包一般可以分兩種方式來實現,第一種可以通過eclipse這種開發工具來導出war包,另外一種是使用命令來完成,這裏主要介紹後一種
  1、maven項目,修改pom包將<packaging>jar</packaging>
    改爲
    <packaging>war</packaging>
  2、打包時排除tomcat

                <dependency>
                            <groupId>org.springframework.boot</groupId>
                            <artifactId>spring-boot-starter-web</artifactId>
                </dependency>
                <dependency>
                            <groupId>org.springframework.boot</groupId>
                            <artifactId>spring-boot-starter-tomcat</artifactId>
                            <scope>provided</scope>
                </dependency>  

  在這裏將scope屬性設置爲provided,這樣在最終形成的WAR中不會包含這個JAR包,因爲Tomcat或Jetty等服務器在運行時將會提供相關的API類。
  
這裏筆者又想拓寬一下知識面,談一談Spring Boot的啓動器Starter

《Spring Boot的啓動器Starter詳解》

上配置文件

不過在此之前,我還要拓展一下知識面對於org.apache.commons.dbcp.BasicDataSource的配置認知
Spring在第三方依賴中包含了兩個數據源的實現類包,一個是Apache的DBCP,另一個是C3P0。使用任意一個都可以配置。
①DBCP數據源
DBCP類包在commons-dbcp.jar,DBCP是一個依賴 Jakarta commons-pool對象池機制的數據庫連接池,所以在類路徑下還必須包括commons-pool.jar。下面是使用DBCP配置MySql數據源的配置片斷:

Spring boot連接mysql數據庫啓動
xml 代碼

<!-- 定義一個使用DBCP實現的數據源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
      destroy-method="close"
      p:driverClassName="com.mysql.jdbc.Driver"
      p:url="jdbc:mysql://127.0.0.1:3306/mysql2020"
      p:username="root"
      p:password="123456"/>

BasicDataSource提供了close()方法關閉數據源,所以必須設定destroy-method=”close”屬性, 以便Spring容器關閉時,數據源能夠正常關閉。
此外其還有以下屬性:
defaultAutoCommit:設置從數據源中返回的連接是否採用自動提交機制,默認值爲 true;
defaultReadOnly:設置數據源是否僅能執行只讀操作, 默認值爲 false;
maxActive:最大連接數據庫連接數,設置爲0時,表示沒有限制;
maxIdle:最大等待連接中的數量,設置爲0時,表示沒有限制;
maxWait:最大等待秒數,單位爲毫秒, 超過時間會報出錯誤信息;
validationQuery:用於驗證連接是否成功的查詢SQL語句,SQL語句必須至少要返回一行數據, 如你可以簡單地設置爲:“select count(*) from user”;
removeAbandoned:是否自我中斷,默認是 false ;
removeAbandonedTimeout:幾秒後數據連接會自動斷開,在removeAbandoned爲true,提供該值;
logAbandoned:是否記錄中斷事件, 默認爲 false;
②C3P0數據源
C3P0是一個開放源代碼的JDBC數據源實現項目,他在Lib目錄中與Hibernate一起發佈,C3P0類包位於c3p0-0.9.0.4.jar。
知識是無限的嘛,這裏只測試一個就好了。這個就不寫了!總之C3P0配置屬性更多,更好!

再次拓展一下知識面對於使用JdbcTemplate簡化JDBC操作 實現數據庫操作
Spring JDBC框架由4個部分組成,即core、datasource、object、support。
org.springframework.jdbc.core包由JdbcTemplate類以及相關的回調接口(callback interface)和類組成。
org.springframework.jdbc.datasource包由一些用來簡化DataSource訪問的工具類,以及各種DataSource接口的簡單實現(主要用於單元測試以及在J2EE容器之外使用JDBC)組成。工具類提供了一些靜態方法,諸如通過JNDI獲取數據連接以及在必要的情況下關閉這些連接。它支持綁定線程的連接,比如被用於DataSourceTransactionManager的連接。
org.springframework.jdbc.object包由封裝了查詢、更新以及存儲過程的類組成,這些類的對象都是線程安全並且可重複使用的。它們類似於JDO,與JDO的不同之處在於查詢結果與數據庫是“斷開連接”的。它們是在org.springframework.jdbc.core包的基礎上對JDBC更高層次的抽象。
org.springframework.jdbc.support包提供了一些SQLException的轉換類以及相關的工具類

據說我們在src下新建applicationContext.xml內容如下:
 

         <?xml version="1.0" encoding="UTF-8"?>
        <beans xmlns="http://www.springframework.org/schema/beans"
                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                     xmlns:p="http://www.springframework.org/schema/p"
                     xmlns:context="http://www.springframework.org/schema/context"
                    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
                http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
                <!-- 掃描類包, 將標註Spring註解的類自動轉化爲Bean,
                同時完成Bean的注入 -->
                <context:component-scan base-package="mysqlt"/>
                <!-- 定義一個使用DBCP實現的數據源 -->
                <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
                            destroy-method="close"
                            p:driverClassName="com.mysql.jdbc.Driver"
                            p:url="jdbc:mysql://127.0.0.1:3306/mysql2020"
                            p:username="root"
                            p:password="123456"/>
                <!-- 定義jdbc模板Bean -->
                <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"
                            p:dataSource-ref="dataSource"/>
        </beans>

【注意】

@Autowired
private JdbcTemplate jdbcTemplate;

這樣寫會報錯:無法訪問org.springframework.dao.DataAccessException

你需要加下面的依賴,這是筆者剛剛踩過的坑。

 <dependency>
                 <groupId>org.springframework</groupId>
                 <artifactId>spring-tx</artifactId>
                 <version>3.1.0.RELEASE</version>
 </dependency>

其實,一個Mevan不可以在項目中直接加jar包。一定要通過Mevan倉庫來加。你可以創建一個假的文件包也可以從網上找依賴資源【筆者剛剛踩過的坑】

也就是說,必須以依賴的形式添加驅動、jdbc、pool

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
        <version>2.2.6.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>commons-dbcp</groupId>
        <artifactId>commons-dbcp</artifactId>
        <version>1.4</version>
    </dependency>
    <dependency>
        <groupId>commons-pool</groupId>
        <artifactId>commons-pool</artifactId>
        <version>1.6</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.38</version>
    </dependency>

上面是一些艱辛的歷程,下面是總結

【demo】
Spring boot連接mysql數據庫啓動

1、DemoApplication啓動類

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {

        public static void main(String[] args) {
                SpringApplication.run(DemoApplication.class, args);
        }

}

2、application.properties配置文件

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mysql2020
spring.datasource.username=root
spring.datasource.password=123456

3、application.yml配置文件

server:
    port: 8089
    servlet:
        context-path: /frozen
http:
    #最大連接數
    maxTotal: 100
    #併發數
    defaultMaxPerroute: 30
    #創建連接的最長時間
    connectTimeout: 1000
    #從連接池中獲取到連接的最長時間
    connectionRequestTimeout: 500
    #數據傳輸的最長時間
    socketTimeout: 10000
    #提交請求前測試連接是否可用
    staleConnectionCheckEnabled: true

4、applicationContext.xml配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xmlns:p="http://www.springframework.org/schema/p"
                 xmlns:context="http://www.springframework.org/schema/context"
                 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
            <!-- 掃描類包, 將標註Spring註解的類自動轉化爲Bean,同時完成Bean的注入 -->
         <context:component-scan base-package="com.example.demo"/>
            <!-- 定義一個使用DBCP實現的數據源 -->
            <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
                        destroy-method="close"
                        p:driverClassName="com.mysql.jdbc.Driver"
                        p:url="jdbc:mysql://127.0.0.1:3306/mysql2020/"
                        p:username="root"
                        p:password="123456"/>
            <!-- 定義jdbc模板Bean -->
            <!-- 配置 Spirng 的 JdbcTemplate -->
            <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
                    <property name="dataSource" ref="dataSource"></property>
            </bean>
    </beans>

5、SpringMysqlConnec測試類

    package com.example.demo;

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import java.util.List;
    @RestController
    @RequestMapping("/redant")
    public class SpringMysqlConnect {

            @Autowired
            JdbcTemplate jdbcTemplate;
            @GetMapping("/20200423")
            public List queryMysqlTest(){
                    String sql = "select * from ceshi";
                    List<?> lst = jdbcTemplate.queryForList(sql);
                 System.out.println("共有" + lst.size() +"個");
                    /*for (int i = 0; i < lst.size(); i++) {
                            System.out.println(lst.get(i));
                    }*/
                    return lst;
            }
    }

Spring boot連接mysql數據庫啓動

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