mki*_*uac 3 spring jndi websphere-liberty spring-boot open-liberty
我正在尝试将小型应用程序从Tomcat迁移到WebSphere。为了做到这一点,我正在从头开始重新构建它,分别解决主要组件。我在webSphere Liberty上的数据访问/ JNDI方面很挣扎。我懂了
javax.naming.NameNotFoundException:javax.naming.NameNotFoundException:java:comp / env / jdbc / test
SERVER.xml
<featureManager>
<feature>webProfile-8.0</feature>
<feature>localConnector-1.0</feature>
<feature>adminCenter-1.0</feature>
<feature>javaee-8.0</feature>
<feature>jndi-1.0</feature>
<feature>concurrent-1.0</feature>
Run Code Online (Sandbox Code Playgroud)
<dataSource id="test" jndiName="jdbc/test" type="javax.sql.DataSource">
<jdbcDriver libraryRef="MySQLLib" />
<properties databaseName="test" serverName="localhost" portNumber="3306" user="user" password="mypassword" />
<jdbcDriver>
<library id="MySQLLib">
<fileset dir="/Library/JDBC/" includes="mysql-connector-java-5.1.14-bin.jar" />
</library>
</jdbcDriver>
</dataSource>
Run Code Online (Sandbox Code Playgroud)
数据配置类
@Configuration
public class DataSourceConfig {
@Resource(lookup = "java:comp/env/jdbc/test", name="java:comp/env/jdbc/test")
private DataSource dataSource;
Run Code Online (Sandbox Code Playgroud)
我也尝试过这种方法:
@Bean
public DataSource dataSource() throws NamingException {
return (DataSource) new JndiTemplate().lookup("java:comp/env/jdbc/test");
}
Run Code Online (Sandbox Code Playgroud)
我注意到的第一件事是<jdbcDriver>server.xml中有2个元素-应该只使用其中一个,如下所示:
<dataSource id="test" jndiName="jdbc/test" type="javax.sql.DataSource">
<properties databaseName="test" serverName="localhost" portNumber="3306" user="user" password="mypassword" />
<jdbcDriver>
<library id="MySQLLib">
<fileset dir="/Library/JDBC/" includes="mysql-connector-java-5.1.14-bin.jar" />
</library>
</jdbcDriver>
</dataSource>
Run Code Online (Sandbox Code Playgroud)
接下来,您将定义一个资源引用,如下所示:
@Resource(lookup = "java:comp/env/jdbc/test", name="java:comp/env/jdbc/test")
private DataSource dataSource;
Run Code Online (Sandbox Code Playgroud)
这实际上表示“对'java:comp / env / jdbc / test'执行JNDI查找并将其绑定到'java:comp / env / jdbc / test'JNDI名称”。这将导致无限循环或循环引用。
相反,您想像这样将绑定lookup到jndiName您在server.xml中定义的:
@Resource(lookup = "jdbc/test", name="java:comp/env/jdbc/test")
private DataSource dataSource;
Run Code Online (Sandbox Code Playgroud)
或者,如果这样不起作用,您可以尝试像下面这样在Spring中进行直接查找:
@Bean
public DataSource dataSource() throws NamingException {
return (DataSource) new JndiTemplate().lookup("java:comp/env/jdbc/test");
}
Run Code Online (Sandbox Code Playgroud)
或使用Java标准API:
DataSource ds = javax.naming.InitialContext.doLookup("jdbc/test");
Run Code Online (Sandbox Code Playgroud)
如果这些选项都不起作用,请检查服务器日志中是否有错误或警告。应该说明为什么无法创建数据源。
在19.0.0.9中,我们发布了REST API,可用于验证dataSources之类的配置元素。
要将其与配置一起使用,请配置管理员用户(如果尚未配置),如下所示:
<quickStartSecurity userName="adminuser" userPassword="adminpwd"/>
Run Code Online (Sandbox Code Playgroud)
然后,在Web浏览器中https://localhost:9443/ibm/api/validation/dataSource/{DATASOURCE_ID},根据您的情况转到https:// localhost:9443 / ibm / api / validation / dataSource / test。
要获得此验证功能的完整演练,请参阅此文章。
| 归档时间: |
|
| 查看次数: |
129 次 |
| 最近记录: |