Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将JNDI用于我的数据源和属性文件的位置_Java_Spring_Maven_Jndi - Fatal编程技术网

Java 将JNDI用于我的数据源和属性文件的位置

Java 将JNDI用于我的数据源和属性文件的位置,java,spring,maven,jndi,Java,Spring,Maven,Jndi,我想在我的spring mvc应用程序中使用jndi实现两件事: 数据源设置 存储属性文件的位置,以便在代码中查找 我实际上有两个应用程序,一个是SpringMVC,另一个是spring,所以我计划对这两个应用程序使用相同的jndi设置 另外,这两个应用程序运行在不同的容器(tomcat和jetty)上,我以前从未使用过jndi,因此我希望我可以在一个位置定义它,并让两个应用程序指向同一个jndi文件(假设它是一个文件) 对于#1,我的spring上下文文件中的数据源设置当前为: <bea

我想在我的spring mvc应用程序中使用jndi实现两件事:

  • 数据源设置
  • 存储属性文件的位置,以便在代码中查找
  • 我实际上有两个应用程序,一个是SpringMVC,另一个是spring,所以我计划对这两个应用程序使用相同的jndi设置

    另外,这两个应用程序运行在不同的容器(tomcat和jetty)上,我以前从未使用过jndi,因此我希望我可以在一个位置定义它,并让两个应用程序指向同一个jndi文件(假设它是一个文件)

    对于#1,我的spring上下文文件中的数据源设置当前为:

    <bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">
            <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost/mydb_development"/>
            <property name="username" value="devuser1"/>
            <property name="password" value="123"/>
    
            <property name="maxActive" value="100"/>
            <property name="maxIdle" value="30"/>
            <property name="maxWait" value="1000"/>
            <property name="defaultAutoCommit" value="true"/>
            <property name="removeAbandoned" value="true"/>
            <property name="removeAbandonedTimeout" value="60"/>
    
            <property name="testOnBorrow" value="true"/>
            <property name="validationQuery" value="SELECT 1"/>
    
        </bean>
    
    现在test.properties文件在我的类路径中,所以它是开箱即用的,但我想知道/理解的是,我是否可以使用jndi查找属性文件的位置(如果有意义的话?),而不必在我的类路径中包含此文件

    我在谷歌上搜索过,我知道在春天我可以使用以下工具使用jndi:

    <jee:jndi-lookup id="dataSource" jndi-name="jdbc/mysqlDataSource" />
    
    
    
    但我不明白的是,有设置的实际文件在哪里?它是否可以位于web.xml文件以外的位置?(我的另一个应用程序同样使用spring,但它是一个守护进程,因此没有web.xml文件)


    我的目标是能够更改jndi文件的值(如用户名、密码、文件路径),而不是将这些值嵌入到jar中。我希望能够在生产服务器或开发服务器上手动编辑这些文件,然后重新启动容器。

    我对spring有些生疏,但我记得使用了PropertyPlaceHolderConfigure,例如:

    <bean id="propertyPlaceholderConfigurer"
            class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="ignoreResourceNotFound">
                <value>true</value>
            </property>
            <property name="ignoreUnresolvablePlaceholders">
                <value>true</value>
            </property>
            <property name="locations">
                <list>
                    <value>file:path to your file
                    </value>
                    <value>file:path to another file if needed
                    </value>
                </list>
            </property>
        </bean>
    
    你可以像这样使用它

    bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">
            <property name="driverClassName" value="${db.driver}"/>
    
    进入


    我敢肯定,通过普通的JNDI查找,您也可以通过代码查找这些配置属性。

    如果您真的只是指设置,我会避免使用JNDI。几乎总是有更简单的方法将特定于机器的配置文件位置输入到应用程序中。我已经从使用JNDI切换到使用webdefaults.xml文件来填充上下文参数。
    db.driver=com.mysql.jdbc.Driver
    
    bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">
            <property name="driverClassName" value="${db.driver}"/>
    
    file:path to your file 
    
    file:${propertiesFilePath}