<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # Spring Boot – 數據源配置 > 原文: [https://howtodoinjava.com/spring-boot2/datasource-configuration/](https://howtodoinjava.com/spring-boot2/datasource-configuration/) 了解什么是數據源以及如何在 Spring Boot 應用程序中創建和自定義`DataSource` bean。 ## 1\. 什么是數據源 數據源是用于連接任何物理數據源的工廠。 `DriverManager`工具的替代品。 它使用 URL 以及一些憑據來建立數據庫連接。 實現[`javax.sql.DataSource`](https://docs.oracle.com/javase/10/docs/api/javax/sql/DataSource.html)接口的對象通常會在 JNDI 服務中注冊,并且可以使用其 JNDI 名稱進行發現。 數據源可用于獲取: * 標準`Connection`對象 * 可以在連接池中使用的連接 * 可以在分布式事務和連接池中使用的連接 ## 2\. 數據源配置 Spring Boot 允許以兩種方式定義數據源配置,即 Java 配置和屬性配置。 `DataSourceAutoConfiguration`在為我們配置`DataSource` bean 之前,先在類路徑上檢查`DataSource.class`(或`EmbeddedDatabaseType.class`)。 #### 2.1. Maven 如果尚未定義,請包含`spring-boot-starter-data-jpa`進行投影。 它帶來了所有必要的依賴關系,包括用于各種數據庫的 JDBC 驅動程序,例如`mysql-connector-java`用于連接到 mysql 。 如果我們計劃在某個步驟(例如測試)使用嵌入式數據庫,則可以單獨導入 H2 db。 `pom.xml` ```java <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> ``` #### 2.2. `application.properties` `application.properties`文件中的外部配置屬性(`spring.datasource.*`)提供了`DataSource`配置。 屬性配置將配置與應用程序代碼分離。 這樣,我們甚至可以從配置提供程序系統中導入數據源配置。 下面給出的配置顯示了 H2,MySQL,Oracle 和 SQL Server 數據庫的示例屬性。 > 我們通常不需要指定`driver-class-name`,因為 Spring Boot 可以從 url 推斷出大多數數據庫。 ```java # H2 spring.datasource.url=jdbc:h2:file:C:/temp/test spring.datasource.username=sa spring.datasource.password= spring.datasource.driverClassName=org.h2.Driver spring.jpa.database-platform=org.hibernate.dialect.H2Dialect # MySQL #spring.datasource.url=jdbc:mysql://localhost:3306/test #spring.datasource.username=dbuser #spring.datasource.password=dbpass #spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect # Oracle #spring.datasource.url=jdbc:oracle:thin:@localhost:1521:orcl #spring.datasource.username=dbuser #spring.datasource.password=dbpass #spring.datasource.driver-class-name=oracle.jdbc.OracleDriver #spring.jpa.database-platform=org.hibernate.dialect.Oracle10gDialect # SQL Server #spring.datasource.url=jdbc:sqlserver://localhost;databaseName=springbootdb #spring.datasource.username=dbuser #spring.datasource.password=dbpass #spring.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver #spring.jpa.hibernate.dialect=org.hibernate.dialect.SQLServer2012Dialect ``` #### 2.3. `DataSource` Bean 推薦的創建`DataSource` bean 的方法是在帶有`@Configuration`注解的類中使用`DataSourceBuilder`類。 數據源也使用基礎連接池。 `JpaConfig.java` ```java @Configuration public class JpaConfig { @Bean public DataSource getDataSource() { DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create(); dataSourceBuilder.driverClassName("org.h2.Driver"); dataSourceBuilder.url("jdbc:h2:file:C:/temp/test"); dataSourceBuilder.username("sa"); dataSourceBuilder.password(""); return dataSourceBuilder.build(); } } ``` #### 2.4. JNDI 數據源 如果我們將 Spring Boot 應用程序部署到應用服務器,則可能需要使用應用服務器的內置功能來配置和管理`DataSource`,并使用 JNDI 對其進行訪問。 我們可以使用`spring.datasource.jndi-name`屬性來執行此操作。 例如 ```java #JBoss defined datasource using JNDI spring.datasource.jndi-name = java:jboss/datasources/testDB ``` ## 3\. 連接池 #### 3.1. HikariCP,tomcat 池和公用 DBCP2 對于要創建的池數據源,Spring Boot 會驗證有效的`Driver`類是否可用。 如果我們設置`spring.datasource.driver-class-name`屬性,則該驅動程序類必須是可加載的。 自動配置首先嘗試查找和配置`HikariCP`。 如果`HikariCP`可用,則始終選擇它。 否則,如果找到 **Tomcat 池**,則對其進行配置。 如果 HikariCP 和 Tomcat 池數據源均不可用,并且 **Commons DBCP2** 不可用,則使用它。 > `spring-boot-starter-data-jpa`起動器自動獲得對`HikariCP`的依賴。 #### 3.2. 自定義設置 還可以通過使用它們各自的前綴(`spring.datasource.hikari.*`,`spring.datasource.tomcat.*`和`spring.datasource.dbcp2.*`)微調[實現特定的設置](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#data-properties)。 例如,我們可以使用以下屬性來[定制 DBCP2 連接池](https://commons.apache.org/proper/commons-dbcp/configuration.html)。 ```java spring.datasource.dbcp2.initial-size = 50 spring.datasource.dbcp2.max-idle = 50 spring.datasource.dbcp2.default-query-timeout = 10000 spring.datasource.dbcp2.default-auto-commit = true ... ``` ## 4\. 使用 Spring Boot 的多個數據源 要配置多個數據源,請創建所需的任意多個 bean 定義,但將`DataSource`實例之一標記為`@Primary`,因為各種自動配置都希望能夠按類型獲取。 請記住,如果我們創建自己的數據源,則會取消自動配置。 因此,我們負責為所有數據源 bean 提供配置。 `JpaConfig.java` ```java @Configuration public class JpaConfig { @Bean(name = "h2DataSource") public DataSource h2DataSource() { DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create(); dataSourceBuilder.driverClassName("org.h2.Driver"); dataSourceBuilder.url("jdbc:h2:file:C:/temp/test"); dataSourceBuilder.username("sa"); dataSourceBuilder.password(""); return dataSourceBuilder.build(); } @Bean(name = "mySqlDataSource") @Primary public DataSource mySqlDataSource() { DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create(); dataSourceBuilder.url("jdbc:mysql://localhost/testdb"); dataSourceBuilder.username("dbuser"); dataSourceBuilder.password("dbpass"); return dataSourceBuilder.build(); } } ``` 在自動裝配數據源時,Spring Boot 將首選主數據源,即`mySqlDataSource`。 要自動裝配另一個非主要數據源,請使用`@Qualifier`注解。 `Autowire primary datasource` ```java @Autowired DataSource dataSource; ``` `Autowire NON-primary datasource` ```java @Autowired @Qualifier("h2DataSource") DataSource dataSource; ``` ## 5\. 結論 Spring Boot 提供了非常簡單的方法來創建數據源 bean – 使用屬性配置或使用 java 配置`@Bean`。 Spring Boot 提供了現成的自動配置以供使用,可以通過`application.properties`文件中的高級選項進一步自定義。 Spring Boot 首先嘗試查找和配置連接池,然后是 HikariCP,然后是 Tomcat 池,然后是 Commons DBCP2。 `HikariCP`內置有`spring-boot-starter-jdbc`或`spring-boot-starter-data-jpa`起動器。 我們可以配置多個數據源,并且其中之一必須標記為`@Primary`。 默認情況下,主數據源是自動裝配的,其他數據源需要與`@Qualifier`注解一起自動裝配。 學習愉快! [下載源碼](https://github.com/lokeshgupta1981/SpringExamples/tree/master/rest-crud-hibernate)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看