win7配置odbc數據源「配置數據源的三個步驟是什麼」

1. 概述

Spring Boot使用自以為是的演算法來掃描和配置 DataSource。這使我們可以輕鬆獲得默認情況下完全配置的DataSource實現。

此外,Spring Boot 會自動配置一個閃電般快速的連接池,HikariCP、 Apache Tomcat或Commons DBCP,根據類路徑上的順序。

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

在本教程中,我們將學習如何在 Spring Boot 中以編程方式配置數據源

2. Maven 依賴

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

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

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

<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 資料庫實例來練習存儲庫層。通過這樣做,我們將能夠測試我們以編程方式配置的數據源,而無需執行昂貴的資料庫操作。

此外,讓我們確保在 Maven Central 上檢查最新版本的
spring-boot-starter-data-jpa

3. 以編程方式配置數據源

現在,如果我們堅持使用 Spring Boot 的自動DataSource配置並在當前狀態下運行我們的項目,它將按預期工作。

Spring Boot 將為我們完成所有繁重的基礎設施管道。這包括創建一個 H2數據源實現,它將由 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.h2.Driver");
        dataSourceBuilder.url("jdbc:h2:mem:test");
        dataSourceBuilder.username("SA");
        dataSourceBuilder.password("");
        return dataSourceBuilder.build();
    }
}

在這種情況下,我們使用了方便的DataSourceBuilder類,這是Joshua Bloch 構建器模式的非流暢版本,以編程方式創建我們的自定義DataSource對象

這種方法非常好,因為構建器可以使用一些常用屬性輕鬆配置數據源。它也使用底層連接池。

4.使用application.properties文件外部化數據源配置

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

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

然後我們可以在application.properties文件中指定一些額外的:

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

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

很明顯,使用這種方法,我們將不再將DataSource配置設置存儲在一個地方

另一方面,它允許我們將編譯時和運行時配置設置很好地相互分離。

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

5. 測試數據源配置

測試我們的自定義DataSource配置非常簡單。整個過程歸結為創建JPA實體、定義基本存儲庫介面和測試存儲庫層。

5.1. 創建 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
    
}

5.2. 一個簡單的存儲庫層

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

由於我們使用的是Spring Data JPA,因此我們不必從頭開始創建自己的DAO實現。我們只需要擴展CrudRepository介面即可獲得有效的存儲庫實現:

@Repository
public interface UserRepository extends CrudRepository<User, Long> {}

5.3. 測試存儲庫層

最後,我們需要檢查我們以編程方式配置的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文件,我們都應該始終獲得有效的資料庫連接

5.4. 運行示例應用程序

最後,我們可以使用標準的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);
        };
    }
}

我們已經測試了存儲庫層,因此我們確定我們的DataSource已成功配置。因此,如果我們運行示例應用程序,我們應該在控制台輸出中看到存儲在資料庫中的用戶實體列表。

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/273953.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-17 14:09
下一篇 2024-12-17 14:09

相關推薦

發表回復

登錄後才能評論