最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot?自定義啟動(dòng)器的實(shí)現(xiàn)

 更新時(shí)間:2023年02月01日 15:20:17   作者:不會(huì)叫的狼  
本文主要介紹了springboot?自定義啟動(dòng)器的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

創(chuàng)建自定義啟動(dòng)器

0、項(xiàng)目總覽

1、創(chuàng)建項(xiàng)目,引入依賴

創(chuàng)建項(xiàng)目 spring-boot-jdbc-starter,引入依賴,pom文件如下:

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.shwen</groupId>
  <artifactId>spring-boot-jdbc-starter</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>spring-boot-jdbc-starter</name>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.3.RELEASE</version>
  </parent>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <!--引入spring‐boot‐starter;所有starter的基本配置-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <!--自動(dòng)配置連接池-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.12</version>
    </dependency>

    <dependency>
      <groupId>c3p0</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.1.2</version>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-configuration-processor</artifactId>
      <optional>true</optional>
    </dependency>
  </dependencies>

</project>

啟動(dòng)器支持多種數(shù)據(jù)源,例如:C3P0和Druid,根據(jù)配置的type進(jìn)行選擇。此處我們引用兩個(gè)連接池依賴,一個(gè)是C3P0,一個(gè)是Druid。

2、創(chuàng)建屬性配置類

package com.shwen.properties;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "spring.jdbc.datasource")
public class DataSourceProperties {
    private String driverClassName;
    private String url;
    private String username;
    private String password;

    public String getDriverClassName() {
        return driverClassName;
    }

    public void setDriverClassName(String driverClassName) {
        this.driverClassName = driverClassName;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "DataSourceProperties{" +
                "driverClassName='" + driverClassName + '\'' +
                ", url='" + url + '\'' +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

屬性配置類注入 application.yml 文件中的配置信息。

3、創(chuàng)建自動(dòng)配置類

package com.shwen.autoconfig;

import ...
import javax.sql.DataSource;

@SpringBootConfiguration
@EnableConfigurationProperties(DataSourceProperties.class)
public class DataSourceAutoConfiguration {
    @Autowired
    private DataSourceProperties dataSourceProperties ;

    @Bean
    @ConditionalOnProperty(value = "spring.jdbc.datasource.type",havingValue = "druid")
    public DataSource createDataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(dataSourceProperties.getDriverClassName());
        dataSource.setUrl(dataSourceProperties.getUrl());
        dataSource.setUsername(dataSourceProperties.getUsername());
        dataSource.setPassword(dataSourceProperties.getPassword());
        return dataSource;
    }

    @Bean
    @ConditionalOnProperty(value = "spring.jdbc.datasource.type",havingValue = "c3p0")
    public DataSource createC3P0DataSource() throws Exception{
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        dataSource.setDriverClass(dataSourceProperties.getDriverClassName());
        dataSource.setJdbcUrl(dataSourceProperties.getUrl());
        dataSource.setUser(dataSourceProperties.getUsername());
        dataSource.setPassword(dataSourceProperties.getPassword());
        return dataSource;
    }
}
  • 如果配置文件中配置了spring.jdbc.datasource.type=c3p0,使用 c3p0 數(shù)據(jù)源。
  • 如果配置文件中配置了spring.jdbc.datasource.type=druid,使用 druid 數(shù)據(jù)源。

此處使用條件選擇實(shí)現(xiàn),@ConditionalOnProperty(value = "spring.jdbc.datasource.type",havingValue = "druid") 根據(jù)配置文件中的 type 值進(jìn)行條件選擇創(chuàng)建不同的 DataSource。

4、創(chuàng)建自動(dòng)配置屬性文件

resource文件夾下面新建 META-INF/spring.factories

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.shwen.autoconfig.DataSourceAutoConfiguration

注意要執(zhí)行 install ,安裝項(xiàng)目。

使用自定義啟動(dòng)器

1、springboot_01 項(xiàng)目引入自定義啟動(dòng)器

pom文件:

<dependency>
  <groupId>com.shwen</groupId>
  <artifactId>spring-boot-jdbc-starter</artifactId>
  <version>1.0-SNAPSHOT</version>
</dependency>

2、配置連接池信息

application.yml

配置文件配置 type 指定需要?jiǎng)?chuàng)建的數(shù)據(jù)源,此處指定數(shù)據(jù)源為druid,并且配置連接屬性信息。

3、注入屬性測(cè)試

@RestController
public class HelloController {

    @Autowired
    private DataSource dataSource;

    @RequestMapping(path = "/hello2")
    public String sayHello2() throws SQLException {
        System.out.println(dataSource.getClass());
        
        DruidDataSource dds = (DruidDataSource) dataSource;
        System.out.println(dds.getPassword());
        return "hello spring boot";
    }
}

注入DataSource,查看連接池屬性。

訪問(wèn) http://127.0.0.1:8080/hello2,打印結(jié)果:

小結(jié)

通過(guò)編寫自定義啟動(dòng)器,我們更加理解springboot自動(dòng)配置原理。springboot項(xiàng)目啟動(dòng)后,

  • 會(huì)讀取所有依賴的 jar 包下面 META-INF/spring.factories 文件,而該文件配置了自動(dòng)配置類,將 spring.factories 中的配置類的全名稱獲取到,并且根據(jù)加載條件來(lái)加載項(xiàng)目所需要的類。
  • 通過(guò)反射實(shí)例化標(biāo)注了@Configuration的 IOC容器配置類,然后匯總并加載到 IOC 容器。當(dāng)收集到所有在 spring.factories 中指定的bean后,再通過(guò)@Import注解將其導(dǎo)入進(jìn)容器。
  • @ConfigurationProperties注解會(huì)讀取配置文件 application.yml 里面屬性,將讀到的值綁定到被注解類的屬性。然后,@EnableConfigurationProperties將屬性配置類注入到 IOC 容器中,這樣當(dāng)項(xiàng)目需要配置信息的時(shí)候可以直接從容器中去取。
  • 至此,依賴的 jar 包中自動(dòng)配置類注入成功,項(xiàng)目可以直接通過(guò)@Autowired裝配使用。

到此這篇關(guān)于springboot 自定義啟動(dòng)器的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)springboot 自定義啟動(dòng)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解jeefast和Mybatis實(shí)現(xiàn)二級(jí)聯(lián)動(dòng)的問(wèn)題

    詳解jeefast和Mybatis實(shí)現(xiàn)二級(jí)聯(lián)動(dòng)的問(wèn)題

    這篇文章主要介紹了詳解jeefast和Mybatis實(shí)現(xiàn)二級(jí)聯(lián)動(dòng)的問(wèn)題,本文通過(guò)圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • SpringMVC上傳圖片代碼實(shí)例

    SpringMVC上傳圖片代碼實(shí)例

    這篇文章主要介紹了SpringMVC上傳圖片代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 淺談Java finally語(yǔ)句到底是在return之前還是之后執(zhí)行(必看篇)

    淺談Java finally語(yǔ)句到底是在return之前還是之后執(zhí)行(必看篇)

    下面小編就為大家?guī)?lái)一篇淺談Java finally語(yǔ)句到底是在return之前還是之后執(zhí)行(必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • java如何用遞歸方法求階乘

    java如何用遞歸方法求階乘

    這篇文章主要介紹了java 用遞歸方法求階乘的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Feign?日期格式轉(zhuǎn)換錯(cuò)誤的問(wèn)題

    Feign?日期格式轉(zhuǎn)換錯(cuò)誤的問(wèn)題

    這篇文章主要介紹了Feign?日期格式轉(zhuǎn)換錯(cuò)誤的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 一個(gè)JAVA小項(xiàng)目--Web應(yīng)用自動(dòng)生成Word

    一個(gè)JAVA小項(xiàng)目--Web應(yīng)用自動(dòng)生成Word

    前段時(shí)間接到一個(gè)Web應(yīng)用自動(dòng)生成Word的需求,現(xiàn)整理了下一些關(guān)鍵步驟拿來(lái)分享一下。
    2014-05-05
  • Java實(shí)現(xiàn)權(quán)重隨機(jī)算法詳解

    Java實(shí)現(xiàn)權(quán)重隨機(jī)算法詳解

    平時(shí),經(jīng)常會(huì)遇到權(quán)重隨機(jī)算法,從不同權(quán)重的N個(gè)元素中隨機(jī)選擇一個(gè),并使得總體選擇結(jié)果是按照權(quán)重分布的。本文就詳細(xì)來(lái)介紹如何實(shí)現(xiàn),感興趣的可以了解一下
    2021-07-07
  • Java如何實(shí)現(xiàn)雙向鏈表功能

    Java如何實(shí)現(xiàn)雙向鏈表功能

    雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個(gè)數(shù)據(jù)結(jié)點(diǎn)中都有兩個(gè)指針,分別指向直接后繼和直接前驅(qū)。所以,從雙向鏈表中的任意一個(gè)結(jié)點(diǎn)開(kāi)始,都可以很方便地訪問(wèn)它的前驅(qū)結(jié)點(diǎn)和后繼結(jié)點(diǎn)。一般我們都構(gòu)造雙向循環(huán)鏈表
    2021-11-11
  • mybatis-plus分頁(yè)查詢?nèi)N方法小結(jié)

    mybatis-plus分頁(yè)查詢?nèi)N方法小結(jié)

    本文主要介紹了mybatis-plus分頁(yè)查詢?nèi)N方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 基于Java接口回調(diào)詳解

    基于Java接口回調(diào)詳解

    這篇文章主要介紹了Java接口回調(diào)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評(píng)論

白河县| 沙洋县| 丹巴县| 福建省| 深州市| 甘孜县| 盱眙县| 吴堡县| 赣榆县| 石首市| 盐城市| 巫山县| 荔浦县| 个旧市| 永靖县| 集安市| 佳木斯市| 万荣县| 东乡| 木里| 汉阴县| 汉寿县| 绥化市| 曲麻莱县| 腾冲县| 岳阳市| 乐东| 武城县| 临安市| 泾阳县| 舞阳县| 大丰市| 成都市| 海淀区| 长垣县| 小金县| 云和县| 平南县| 保康县| 行唐县| 金寨县|