<menu id="ycqsw"></menu><nav id="ycqsw"><code id="ycqsw"></code></nav>
<dd id="ycqsw"><menu id="ycqsw"></menu></dd>
  • <nav id="ycqsw"></nav>
    <menu id="ycqsw"><strong id="ycqsw"></strong></menu>
    <xmp id="ycqsw"><nav id="ycqsw"></nav>
  • 配置數據源的三個步驟是什么(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已成功配置。因此,如果我們運行示例應用程序,我們應該在控制臺輸出中看到存儲在數據庫中的用戶實體列表。

    版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。

    發表評論

    登錄后才能評論
    国产精品区一区二区免费