gpt4 book ai didi

java - Spring Boot、多数据源和 JNDI 连接

转载 作者:行者123 更新时间:2023-11-28 22:29:02 27 4
gpt4 key购买 nike

我无法通过 Spring Boot 在 JDNI 中连接到两个数据源。

生成以下堆栈跟踪:

TID: [0] [AS] [2015-04-06 10:53:50,795] ERROR
{org.apache.tomcat.jdbc.pool.ConnectionPool} - Unable to create
initial connections of pool.
{org.apache.tomcat.jdbc.pool.ConnectionPool} java.sql.SQLException:
The url cannot be null at
java.sql.DriverManager.getConnection(DriverManager.java:556) at
java.sql.DriverManager.getConnection(DriverManager.java:187) at
org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:305)
at
org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:200)
at
org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:699)
at
org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:633)
at
org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:484)
at
org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:142)
at
org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:115)
at
org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:102)
at
org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:126)
at
org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111)
at
org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77)
at
org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:339)
at
org.springframework.boot.autoconfigure.jdbc.EmbeddedDatabaseConnection.isEmbedded(EmbeddedDatabaseConnection.java:126)
at
org.springframework.boot.autoconfigure.orm.jpa.JpaProperties$Hibernate.getDefaultDdlAuto(JpaProperties.java:203)
at
org.springframework.boot.autoconfigure.orm.jpa.JpaProperties$Hibernate.getOrDeduceDdlAuto(JpaProperties.java:191)
at
org.springframework.boot.autoconfigure.orm.jpa.JpaProperties$Hibernate.getAdditionalProperties(JpaProperties.java:179)
at
org.springframework.boot.autoconfigure.orm.jpa.JpaProperties$Hibernate.access$000(JpaProperties.java:130)
at
org.springframework.boot.autoconfigure.orm.jpa.JpaProperties.getHibernateProperties(JpaProperties.java:127)
at
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration.getVendorProperties(HibernateJpaAutoConfiguration.java:99)
at
org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.entityManagerFactory(JpaBaseConfiguration.java:111)
at
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration$$EnhancerBySpringCGLIB$$d2a55c5.CGLIB$entityManagerFactory$5(<generated>)
at
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration$$EnhancerBySpringCGLIB$$d2a55c5$$FastClassBySpringCGLIB$$caf87827.invoke(<generated>)
at
org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
at
org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:309)
at
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration$$EnhancerBySpringCGLIB$$d2a55c5.entityManagerFactory(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606) at
org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)
at
org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1111)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1006)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
at
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
at
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at
org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:956)
at
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:747)
at
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
at
org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
at
org.springframework.boot.SpringApplication.refresh(SpringApplication.java:686)
at
org.springframework.boot.SpringApplication.run(SpringApplication.java:320)
at
org.springframework.boot.context.web.SpringBootServletInitializer.run(SpringBootServletInitializer.java:117)
at
org.springframework.boot.context.web.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:108)
at
org.springframework.boot.context.web.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:68)
at
org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:175)
at
org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5274)
at
org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at
org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
at
org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
at
org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
at
org.wso2.carbon.tomcat.internal.CarbonTomcat.addWebApp(CarbonTomcat.java:280) at
org.wso2.carbon.tomcat.internal.CarbonTomcat.addWebApp(CarbonTomcat.java:177) at
org.wso2.carbon.webapp.mgt.TomcatGenericWebappsDeployer.handleWebappDeployment(TomcatGenericWebappsDeployer.java:222)
at
org.wso2.carbon.webapp.mgt.TomcatGenericWebappsDeployer.handleWarWebappDeployment(TomcatGenericWebappsDeployer.java:174)
at
org.wso2.carbon.webapp.mgt.TomcatGenericWebappsDeployer.handleHotDeployment(TomcatGenericWebappsDeployer.java:141)
at
org.wso2.carbon.webapp.mgt.TomcatGenericWebappsDeployer.deploy(TomcatGenericWebappsDeployer.java:116)
at
org.wso2.carbon.webapp.mgt.AbstractWebappDeployer.deployThisWebApp(AbstractWebappDeployer.java:140)
at
org.wso2.carbon.webapp.mgt.AbstractWebappDeployer.deploy(AbstractWebappDeployer.java:90)
at
org.wso2.carbon.webapp.deployer.WebappDeployer.deploy(WebappDeployer.java:42) at
org.wso2.carbon.webapp.mgt.AbstractWebappDeployer.handleRedeployment(AbstractWebappDeployer.java:410)
at
org.wso2.carbon.webapp.mgt.AbstractWebappDeployer.undeploy(AbstractWebappDeployer.java:188)
at
org.apache.axis2.deployment.DeploymentEngine.unDeploy(DeploymentEngine.java:914)
at
org.apache.axis2.deployment.repository.util.WSInfoList.update(WSInfoList.java:143)
at
org.apache.axis2.deployment.RepositoryListener.update(RepositoryListener.java:377)
at
org.apache.axis2.deployment.RepositoryListener.checkServices(RepositoryListener.java:254)
at
org.apache.axis2.deployment.RepositoryListener.startListener(RepositoryListener.java:371)
at
org.apache.axis2.deployment.scheduler.SchedulerTask.checkRepository(SchedulerTask.java:59)
at
org.apache.axis2.deployment.scheduler.SchedulerTask.run(SchedulerTask.java:67)
at
org.wso2.carbon.core.deployment.CarbonDeploymentSchedulerTask.runAxisDeployment(CarbonDeploymentSchedulerTask.java:79)
at
org.wso2.carbon.core.deployment.CarbonDeploymentSchedulerTask.run(CarbonDeploymentSchedulerTask.java:124)
at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304)
at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178)
at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)

这是我的 YAML 文件的内容(我用主机、端口、数据库、服务器、用户名和密码信息代替了占位符):

spring:
profiles:
active: development

---

spring:
profiles: local

datasource:
future:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://<host>:<port>/<database>
username: <username>
password: <password>
jpa:
hibernate:
ddl-auto: validate
database-platform: org.hibernate.dialect.MySQL5Dialect
show-sql: true
past:
driver-class-name: com.informix.jdbc.IfxDriver
url: jdbc:informix-sqli://<host>:<port>/<database>:INFORMIXSERVER=<server>
jpa:
hibernate:
ddl-auto: validate
database-platform: org.hibernate.dialect.InformixDialect
show-sql: true
jmx:
enabled: false
logging:
file: /logs/my.log
level:
org.springframework: 'OFF'
---

spring:
profiles: development
datasource:
future:
datasource:
jndi-name: java:/comp/env/jdbc/ds1
platform: mysql
jpa:
hibernate:
ddl-auto: validate
database-platform: org.hibernate.dialect.MySQL5Dialect
show-sql: true
past:
datasource:
jndi-name: java:/comp/env/jdbc/ds2
platform: informix
jpa:
hibernate:
ddl-auto: validate
database-platform: org.hibernate.dialect.InformixDialect
show-sql: true
jmx:
enabled: false
logging:
file: /logs/my.log
level:
org.springframework: 'OFF'

这是我的 Application.java(应用程序入口点)文件的内容。

package com.mydomain.app.appconfig;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.orm.jpa.EntityScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Primary;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;

import javax.sql.DataSource;

@Configuration
@EnableAutoConfiguration
@ComponentScan(basePackages = {"com.mydomain.app"})
@EnableJpaRepositories(basePackages = "com.mydomain.app.repository")
@EntityScan(basePackages = {"com.mydomain.app.entity"})
public class Application {
@Bean
@Primary
@ConfigurationProperties(prefix = "datasource.future")
public DataSource futureDataSource() {
return DataSourceBuilder.create().build();
}

@Bean
@ConfigurationProperties(prefix = "datasource.past")
public DataSource pastDataSource() {
return DataSourceBuilder.create().build();
}

@Bean
public JdbcTemplate futureJdbcTemplate() {
return new JdbcTemplate(futureDataSource());
}

@Bean
public JdbcTemplate pastJdbcTemplate() {
return new JdbcTemplate(pastDataSource());
}

public static void main(String[] args) {
SpringApplication.run(StayServiceApplication.class, args);
}
}

这是我负责定义 JNDI 连接的 context.xml 文件的片段。

<Context>

<!-- Default set of monitored resources -->

<Loader className="org.wso2.carbon.webapp.mgt.loader.CarbonWebappLoader" loaderClass="org.wso2.carbon.webapp.mgt.loader.CarbonWebappClassLoader"/>

<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->

<!-- Uncomment this to enable Comet connection tacking (provides events
on session expiration as well as webapp lifecycle) -->
<!--
<Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
-->

<Resource name="jdbc/stayds" auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
maxActive="30" maxIdle="10" maxWait="10000"
url="jdbc:mysql://<host>:<post>/<database>"
username="<username>" password="<password>" />

<Resource name="jdbc/gpmds" auth="Container"
type="javax.sql.DataSource"
driverClassName="com.informix.jdbc.IfxDriver"
url="jdbc:informix-sqli://<host>:<post>/<database>:INFORMIXSERVER=<server>"
maxActive="30" maxIdle="10" maxWait="10000"
removeAbandoned="true" removeAbandonedTimeout="60"
logAbandoned="true" />
</Context>

我做错了什么?

最佳答案

此应用程序已部署到 WSO2 应用程序服务器。在 WSO2 应用程序控制台中的 JNDI 连接配置中添加 JNDI 属性解决了这个问题。

关于java - Spring Boot、多数据源和 JNDI 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29475163/

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