Java 为什么是JNDI呢´;s无法从数据源中识别bean
您好,我想将DataSource从Server.xml与Liberty分离,并在类中显式包含连接参数,如以下链接所示,但当我添加@Resource注释时,会出现以下问题: 我的连接器是mysql 没有名为“jndi/mysql”的bean可用:在jndi环境中找不到 基于该主题的任何贡献或帮助都将受到好评。问候 我曾经尝试过一种方法,在这种方法中,我使用正确的符号@bean和@Primary返回bean的数据源,但是日志仍然是一样的Java 为什么是JNDI呢´;s无法从数据源中识别bean,java,mysql,spring-data-jpa,datasource,jndi,Java,Mysql,Spring Data Jpa,Datasource,Jndi,您好,我想将DataSource从Server.xml与Liberty分离,并在类中显式包含连接参数,如以下链接所示,但当我添加@Resource注释时,会出现以下问题: 我的连接器是mysql 没有名为“jndi/mysql”的bean可用:在jndi环境中找不到 基于该主题的任何贡献或帮助都将受到好评。问候 我曾经尝试过一种方法,在这种方法中,我使用正确的符号@bean和@Primary返回bean的数据源,但是日志仍然是一样的 @DataSourceDefinition(
@DataSourceDefinition(
name= "java:comp/env/jdbc/mysql",
className = "com.mysql.jdbc.Driver",
url = "jdbc:mysql://localhost/mini_blog_es2?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC",
user = "root",
password = "tuna"
) })
`public class JPAConfigDatabase {
@Resource(lookup = "jndi/mysql")
private DataSource dataSource;
`
// Get Method
@Primary
@Bean(name = "dataSource")
public DataSource getDataSource() {
DataSource data = null;
try {
data = (DataSource) new JndiTemplate().lookup("jndi/mysql");
System.out.println("Conexion Exitosa");
} catch (Exception e) {
System.out.println("NO JALO" + e.getMessage());
}
return data;
}
}
`
/*************************SERVER.xml自由服务器***************************//
webProfile-7.0
localConnector-1.0
我希望控制台打印消息Conexion Exitosa可以将此数据源用于另一个模块:
错误日志:由以下原因引起:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有名为“jndi/mysql”的bean可用:在jndi环境中找不到是否使用WebSphere Liberty作为应用程序服务器?如果是这样的话,数据源在哪里注册?目前,我已经在server.xml中注册了,但我尝试为java类方式制定下一个约定。似乎您正在使用一个名称注册数据源,并使用另一个名称查找它。也许您应该将
@Resource(lookup=“jndi/mysql”)
更改为@Resource(lookup=“java:comp/env/jdbc/mysql”)
。另外,请在web.xml文件中包含数据源定义。它应该有相同的名称。此外,我认为在应用程序中定义数据源是一种不好的做法。关键是要将数据库定义与应用程序分离,但这两者都有牵连。异常消息是:com.ibm.ws.container.service.state.StateChangeException:com.ibm.ws.cdi.cdieException:com.ibm.wsspi.injectionengine.InjectionException:java.sql.SQLNonTransientException:J2CA8022E:Application moii-srv war没有任何为数据源java:comp/env/jdbc提供com.mysql.cj.jdbc.Driver的共享库MySQL您是否使用WebSphere Liberty作为应用程序服务器?如果是这样的话,数据源在哪里注册?目前,我已经在server.xml中注册了,但我尝试为java类方式制定下一个约定。似乎您正在使用一个名称注册数据源,并使用另一个名称查找它。也许您应该将@Resource(lookup=“jndi/mysql”)
更改为@Resource(lookup=“java:comp/env/jdbc/mysql”)
。另外,请在web.xml文件中包含数据源定义。它应该有相同的名称。此外,我认为在应用程序中定义数据源是一种不好的做法。关键是要将数据库定义与应用程序分离,但这两者都有牵连。异常消息是:com.ibm.ws.container.service.state.StateChangeException:com.ibm.ws.cdi.cdieException:com.ibm.wsspi.injectionengine.InjectionException:java.sql.SQLNonTransientException:J2CA8022E:Application moii-srv war没有任何为数据源java:comp/env/jdbc提供com.mysql.cj.jdbc.Driver的共享库mysql
<!-- Enable features -->
<featureManager>
<feature>webProfile-7.0</feature>
<feature>localConnector-1.0</feature>
</featureManager>
<!-- To access this server from a remote client add a host attribute to
the following element, e.g. host="*" -->
<httpEndpoint httpPort="9080" httpsPort="9443" id="defaultHttpEndpoint"/>
<!-- Automatically expand WAR files and EAR files -->
<applicationManager autoExpand="true"/>
<library id="JTDS">
<fileset dir="resources/sqlserver" includes="mysql-connector-java-6.0.3"/>
</library>
<webApplication id="moii-srv-war" location="moii-srv-war-0.0.1-SNAPSHOT.war" name="moii-srv-war">
<classloader commonLibraryRef="JTDS"/>
</webApplication>