我正在尝试使用JNDI为Spring Web应用程序设置数据库连接属性.
我正在考虑以下两种方法:
方法1:
在Spring配置中,您可能会遇到以下情况:
<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/facs"/>
Run Code Online (Sandbox Code Playgroud)
然后在你的webapp /META-INF/context.xml文件中你也应该有类似的东西:
<?xml version='1.0' encoding='utf-8'?>
<!-- antiResourceLocking="true" -->
<Context path="/podd-apn"
reloadable="true"
cachingAllowed="false"
antiResourceLocking="true"
>
<Resource name="jdbc/facs"
type="javax.sql.DataSource" username="${database.username}" password="${database.password}"
driverClassName="org.postgresql.Driver"
url="${database.url}"
maxActive="8" maxIdle="4"
global="jdbc/facs"
/>
</Context>
Run Code Online (Sandbox Code Playgroud)
在你的web.xml中,你应该这样:
<!-- JNDI -->
<resource-ref>
<description>FACs Datasource</description>
<res-ref-name>jdbc/facs</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
Run Code Online (Sandbox Code Playgroud)
方法2:
在Spring上下文中设置如下:
<jee:jndi-lookup id="dbDataSource"
jndi-name="jdbc/DatabaseName"
expected-type="javax.sql.DataSource" />
Run Code Online (Sandbox Code Playgroud)
您可以使用以下内容在Tomcat的server.xml中声明JNDI资源:
<GlobalNamingResources>
<Resource name="jdbc/DatabaseName" auth="Container" type="javax.sql.DataSource"
username="dbUsername" password="dbPasswd"
url="jdbc:postgresql://localhost/dbname"
driverClassName="org.postgresql.Driver"
initialSize="5" maxWait="5000"
maxActive="120" maxIdle="5"
validationQuery="select 1"
poolPreparedStatements="true"/>
</GlobalNamingResources/>
Run Code Online (Sandbox Code Playgroud)
并从Tomcat的web context.xml引用JNDI资源,如下所示:
<ResourceLink name="jdbc/DatabaseName"
global="jdbc/DatabaseName"
type="javax.sql.DataSource"/>
Run Code Online (Sandbox Code Playgroud)
我的问题是保留数据库属性的最佳位置在哪里?它们应该放在server.xml还是context.xml中 …
我的C:驱动器中有一个文件夹,因为C:\app_config\java_app
此文件夹包含一些特定于语言环境的属性文件.
我有一个java类(PrjPropertilesLocator)在Web App启动时基于默认语言环境加载属性文件.我的Web应用程序在tomcat中运行.问题是我应该如何C:\app_config\java_app在tomcat类路径中设置这个目录,以便它可以在PrjPropertilesLocator类中的ResourceBundle中使用.有没有办法我可以专门为需要它的单个Web应用程序设置此文件夹.我不想将属性文件放在WEB-INF/classes文件夹中.
在weblogic上运行正常.我在其中一个启动脚本中设置了weblogic类路径中的目录,它工作正常.但在Tomcat我试图把它startup.bat还在setclasspath.bat,但没能成功地这样做.
对于某些应用程序,我使用ZK,其他Hibernate,其他Apache Commons等.
我不想部署一个75MB的war文件,因为它使用了大量的库.
我不想将库添加到我的tomcat lib文件夹中,也不想将其添加到其配置的类路径中,因为我可能有一个使用库x.1的旧应用程序和另一个使用库x.2的应用程序
出于这个原因,在web.xml或context.xml中有一些东西会很棒,我会说:
<classpath>/usr/local/tomcat/custom-libs/zk-5.0.4</classpath>
Run Code Online (Sandbox Code Playgroud)
注意:以上是伪代码
创建从属性文件中读取配置参数的Tomcat部署的可接受做法是什么?
能够提供WAR文件并指定客户端只需要在特定目录中创建或编辑属性文件,这将是一件好事.这是一种有点常规的做事方式吗?有比这更好的方法吗?
我在context.xml中有一个DataSource配置.是否有可能不对该文件中的数据库参数进行硬编码?例如,使用外部属性文件,并从中加载参数?
像这样的东西:
context.xml中:
<Resource
name="jdbc/myDS" auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.OracleDriver"
url="${db.url}"
username="${db.user}"
password="${db.pwd}"
maxActive="2"
maxIdle="2"
maxWait="-1"/>
Run Code Online (Sandbox Code Playgroud)
db.properties:
db.url=jdbc:oracle:thin:@server:1521:sid
db.user=test
db.pwd=test
Run Code Online (Sandbox Code Playgroud) 我有这个要求,我的webapp需要从Tomcat webapps目录之外的属性文件中读取,例如从$ CATALINA_HOME/properties/myapp.properties读取.我尝试了几件事,但到目前为止还没有运气
tomcat ×5
java ×4
classpath ×2
properties ×2
datasource ×1
deployment ×1
jndi ×1
servlets ×1
spring ×1