中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在SpringBoot中對DataSource進行配置

發布時間:2021-03-25 16:27:06 來源:億速云 閱讀:288 作者:Leah 欄目:編程語言

這篇文章給大家介紹怎么在SpringBoot中對DataSource進行配置,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

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

Spring Boot還會按順序快速的自動配置連接池(HikariCP, Apache Tomcat或Commons DBCP),具體取決于路徑中的哪些類。

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

Maven依賴

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

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

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

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
  <groupId>com.h3database</groupId>
  <artifactId>h3</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注解的類中:

@Configuration
public class DataSourceConfig {
   
  @Bean
  public DataSource getDataSource() {
    DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
    dataSourceBuilder.driverClassName("org.h3.Driver");
    dataSourceBuilder.url("jdbc:h3:mem:test");
    dataSourceBuilder.username("SA");
    dataSourceBuilder.password("");
    return dataSourceBuilder.build();
  }
}

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

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

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

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

@Bean
public DataSource getDataSource() { 
  DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create(); 
  dataSourceBuilder.username("SA"); 
  dataSourceBuilder.password(""); 
  return dataSourceBuilder.build(); 
}

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

spring.datasource.url=jdbc:h3:mem:test
spring.datasource.driver-class-name=org.h3.Driver

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

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

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

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

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

  • 創建JPA實體

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

@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接口獲得一個工作的存儲庫實現:

@Repository
public interface UserRepository extends CrudRepository<User, Long> {}
  • 測試存儲庫層

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

@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()方法運行我們的演示應用程序:

@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);
    };
  }
}

關于怎么在SpringBoot中對DataSource進行配置就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿瓦提县| 稷山县| 高州市| 内乡县| 永宁县| 利津县| 临邑县| 石泉县| 虎林市| 新营市| 黄冈市| 灌云县| 莱芜市| 柘城县| 平江县| 砚山县| 道孚县| 济南市| 民勤县| 弋阳县| 鄂州市| 咸丰县| 井陉县| 阿城市| 徐水县| 奎屯市| 吴江市| 杭锦后旗| 佳木斯市| 卢龙县| 霍城县| 安阳市| 临漳县| 延津县| 旅游| 商丘市| 循化| 贡嘎县| 桑植县| 科技| 闽清县|