国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - SpringBoot使用編程方式配置DataSource的方法

SpringBoot使用編程方式配置DataSource的方法

2021-07-13 11:35qianmoQ Java教程

這篇文章主要介紹了SpringBoot使用編程方式配置DataSource的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

spring boot使用固定算法來掃描和配置datasource。這使我們可以在默認情況下輕松獲得完全配置的datasource實現。

spring boot還會按順序快速的自動配置連接池(hikaricp, apache tomcat或commons dbcp),具體取決于路徑中的哪些類。

雖然spring boot的datasource自動配置在大多數情況下運行良好,但有時我們需要更高級別的控制,因此我們必須設置自己的datasource實現,因此忽略自動配置過程。

maven依賴

總體而言,以編程方式創建datasource實現非常簡單。

為了學習如何實現這一目標,我們將實現一個簡單的存儲庫層,它將對某些jpa實體執行crud操作。

我們來看看我們的演示項目的依賴項:

?
1
2
3
4
5
6
7
8
9
10
<dependency>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-data-jpa</artifactid>
</dependency>
<dependency>
  <groupid>com.h2database</groupid>
  <artifactid>h2</artifactid>
  <version>2.4.1</version>
  <scope>runtime</scope>
</dependency>

我們將使用內存中的h2數據庫實例來運行存儲庫層。通過這樣做,我們將能夠測試以編程方式配置的datasource,而無需執行昂貴的數據庫操作。

讓我們確保在maven central上查看最新版本的spring-boot-starter-data-jpa。

配置datasource

如果我們堅持使用spring boot的datasource自動配置并以當前狀態運行我們的項目,程序將按預期工作。

spring boot將為我們完成所有重型基礎設施管道。這包括創建h2 datasource實現,該實現將由hikaricp,apache tomcat或commons dbcp自動處理,并設置內存數據庫實例。

此外,我們甚至不需要創建application.properties文件,因為spring boot也會提供一些默認的數據庫設置。

正如我們之前提到的,有時我們需要更高級別的自定義,因此我們必須以編程方式配置我們自己的datasource實現。

實現此目的的最簡單方法是定義datasource工廠方法,并將其放在使用@configuration注解的類中:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
@configuration
public class datasourceconfig {
   
  @bean
  public datasource getdatasource() {
    datasourcebuilder datasourcebuilder = datasourcebuilder.create();
    datasourcebuilder.driverclassname("org.h2.driver");
    datasourcebuilder.url("jdbc:h2:mem:test");
    datasourcebuilder.username("sa");
    datasourcebuilder.password("");
    return datasourcebuilder.build();
  }
}

在這種情況下,我們使用方便的datasourcebuilder類 - 一個簡潔的joshua bloch構建器模式 - 以編程方式創建我們的自定義datasource對象。

這種方法非常好,因為構建器可以使用一些常用屬性輕松配置datasource。此外,它還可以使用底層連接池。

使用application.properties文件外部化datasource配置

當然,也可以部分外部化我們的datasource配置。例如,我們可以在工廠方法中定義一些基本的datasource屬性:

?
1
2
3
4
5
6
7
@bean
public datasource getdatasource() {
  datasourcebuilder datasourcebuilder = datasourcebuilder.create();
  datasourcebuilder.username("sa");
  datasourcebuilder.password("");
  return datasourcebuilder.build();
}

并在application.properties文件中指定一些額外的配置:

?
1
2
spring.datasource.url=jdbc:h2:mem:test
spring.datasource.driver-class-name=org.h2.driver

在外部源中定義的屬性(例如上面的application.properties文件或通過使用@configurationproperties注解的類)將覆蓋java api中定義的屬性。

很明顯,通過這種方法,我們不再將datasource配置設置保存在一個地方。

另一方面,它允許我們保持編譯時和運行時配置彼此并很好地分離。

這非常好,因為它允許我們輕松設置綁定點。這樣我們可以從其他來源包含不同的datasource,而無需重構我們的bean工廠方法。

測試datasource配置
測試我們的自定義datasource配置非常簡單。整個過程歸結為創建jpa實體,定義基本存儲庫接口以及測試存儲庫層。

  • 創建jpa實體

讓我們開始定義我們的示例jpa實體類,它將為用戶建模:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
@entity
@table(name = "users")
public class user {
   
  @id
  @generatedvalue(strategy = generationtype.auto)
  private long id;
  private string name;
  private string email;
 
  // standard constructors / setters / getters / tostring
   
}
  • 存儲庫層

我們需要實現一個基本的存儲庫層,它允許我們對上面定義的user實體類的實例執行crud操作。

由于我們使用的是spring data jpa,因此我們不必從頭開始創建自己的dao實現。我們只需要擴展crudrepository接口獲得一個工作的存儲庫實現:

?
1
2
@repository
public interface userrepository extends crudrepository<user, long> {}
  • 測試存儲庫層

最后,我們需要檢查我們的編程配置的datasource是否實際工作。我們可以通過集成測試輕松完成此任務:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@runwith(springrunner.class)
@datajpatest
public class userrepositoryintegrationtest {
   
  @autowired
  private userrepository userrepository;
  
  @test
  public void whencalledsave_thencorrectnumberofusers() {
    userrepository.save(new user("bob", "bob@domain.com"));
    list<user> users = (list<user>) userrepository.findall();
     
    assertthat(users.size()).isequalto(1);
  
}

userrepositoryintegrationtest類是測試用例。它只是運行兩個存儲庫接口的crud方法來持久化并查找實體。

請注意,無論我們是否決定以編程方式配置datasource實現,或將其拆分為java配置方法和application.properties文件,我們都應該始終獲得有效的數據庫連接。

  • 運行示例應用程序

最后,我們可以使用標準的main()方法運行我們的演示應用程序:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@springbootapplication
public class application {
 
  public static void main(string[] args) {
    springapplication.run(application.class, args);
  }
 
  @bean
  public commandlinerunner run(userrepository userrepository) throws exception {
    return (string[] args) -> {
      user user1 = new user("john", "john@domain.com");
      user user2 = new user("julie", "julie@domain.com");
      userrepository.save(user1);
      userrepository.save(user2);
      userrepository.findall().foreach(user -> system.out.println(user);
    };
  }
}

我們已經測試了存儲庫層,因此我們確信我們的datasource已經成功配置。因此,如果我們運行示例應用程序,我們應該在控制臺輸出中看到存儲在數據庫中的user實體列表。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://segmentfault.com/a/1190000018045674

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 中文在线一区 | 黄色片地址 | 九九综合 | 中文国产在线观看 | 亚洲黄色激情 | 亚洲国产精品久久久久 | 91精品国产欧美一区二区成人 | 天天天天干 | 99视频在线| 亚洲精品视 | 国产日韩精品在线 | 日韩成人精品 | 激情综合五月天 | 亚洲国产精品久久久久久 | 欧美自拍一区 | 久久精品一区二区国产 | 在线观看亚洲免费视频 | 国产成人免费高清激情视频 | 久久妇女 | 久久99er6热线精品首页蜜臀 | 免费观看a视频 | 欧美爱爱视频 | 成人高清视频在线观看 | 成人在线一区二区 | 精品国产视频 | 激情综合色综合久久综合 | 秋霞av电影 | 人体一区 | 亚洲精品久久久 | 在线看无码的免费网站 | 精品美女久久久 | 欧美激情在线播放 | 成人看的免费视频 | 日韩在线字幕 | 国产三区在线视频 | 欧美日韩国产一区二区三区 | 国产精品99精品久久免费 | 青草福利| 黄色免费视频 | 久草网站 | 黄色福利视频 |