gpt4 book ai didi

oracle - 如何在独立( war )和嵌入式 Tomcat 中为 Spring-Boot 应用程序配置数据源?

转载 作者:行者123 更新时间:2023-12-04 17:35:36 30 4
gpt4 key购买 nike

我有一个带有以下 dependencyManagement 的 Spring-Boot-Aplication:

<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

和以下依赖项:

spring-boot-starter-jersey
spring-boot-starter-jdbc(exclusion:tomcat-jdbc)
HikariCP(version:3.3.1)
ojdbc7

Tomcat 上,我将 JNDI-Datasource 配置为:

<Resource name="jdbc/myDS" 
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver"
username="Superuser"
password="secret"
url="jdbc:oracle:thin:@xxxDbX"
../>

.properties 文件中,我添加了以下属性:

spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource    
spring.datasource.jndi-name=jdbc/myDS

由于 Spring-Boot 能够从属性配置 DataSource,我让它这样做并且我没有为 DataSource< 编写额外的代码/强>。部署在 Standalone Tomcat 中,它运行完美。

逻辑上 Spring Boot 无法在 embedded Tomcat 中找到 JNDI-Resource 并将应用程序作为 Spring-Boot 启动-申请 我得到了:

***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to bind properties under 'spring.datasource.type' to java.lang.Class<javax.sql.DataSource>:

Property: spring.datasource.type
Value: org.apache.tomcat.jdbc.pool.DataSource
Origin: class path resource [application.properties]:12:24
Reason: No converter found capable of converting from type [java.lang.String] to type [java.lang.Class<javax.sql.DataSource>]

Action:

Update your application's configuration

我希望能够将应用程序作为 Spring-Boot-Application 启动,并构建一个可以部署在任何 中的 war 文件独立的 Tomcat

如果应用程序作为 Spring-Boot-Application 启动,或者我必须有第二个 .properties 文件?

最佳答案

对我有用的解决方案是添加一个自定义属性以用于嵌入式 Tomcat 服务器 中的DataSource,如下所示:

# for a dedicated Tomcat
spring.datasource.jndi-name=jdbc/dirserver


# for the embedded Tomcat

embedded.datasource.driver-class-name=oracle.jdbc.OracleDriver
embedded.datasource.url=jdbc:oracle:thin:@//myServer:1521/xxxxx
embedded.datasource.username=superuser
embedded.datasource.password=topsecret

并在用 @SpringBootApplication 注释的类中定义 @Bean DataSource:

@SpringBootApplication
public class MySbApplication extends SpringBootServletInitializer {

private static final Logger lg = LoggerFactory.getLogger(MySbApplication.class);

@Value("${embedded.datasource.username}")
String username;
@Value("${embedded.datasource.password}")
String password;
@Value("${embedded.datasource.driver-class-name}")
String driverClassName;
@Value("${embedded.datasource.url}")
String url;

@Bean(destroyMethod = "")
public DataSource oracledataSoutŕce() throws SQLException {
final OracleDataSource dataSource = new OracleDataSource();
dataSource.setUser(username);
dataSource.setPassword(password);
dataSource.setURL(url);
dataSource.setImplicitCachingEnabled(true);
dataSource.setFastConnectionFailoverEnabled(true);
return dataSource;
}
}

我将在 Github 中添加一个示例项目的链接。

关于oracle - 如何在独立( war )和嵌入式 Tomcat 中为 Spring-Boot 应用程序配置数据源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56786100/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com