0

我有一个 Java EE 数据源,如果设置了属性,我只想调用它。是否可以设置系统属性或 vm 参数以便仅使用此 Java EE 数据源(如果为真)。Spring 尝试在服务器启动时连接到此 jndi 数据源,但我需要控制何时建立此连接。所以在某些情况下,Spring 不应该尝试与数据源“myDataSource”建立连接。这是我的上下文文件中的配置:

<jee:jndi-lookup id="myDataSource" jndi-name="jdbc/mydb"
        resource-ref="true" expected-type="javax.sql.DataSource" />

我可以使用弹簧表达式来控制它:

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/expressions.html

在这里阅读接受的答案:

Spring config 中的条件语句 我可以使用 vm 参数来指示是否应该使用 jndi 数据源?

4

3 回答 3

1

它看起来像是Spring 配置文件的一个很好的案例。

您需要将您<jee:jndi-lookup>的个人资料放入个人资料并仅在需要时激活它。

然后,您可以使用内置系统属性 ( spring.profiles.active) 来激活必要的配置文件,或者在基于某些自定义属性的存在初始化应用程序上下文时手动激活它们(如果您有一个 Web 应用程序,您需要使用ApplicationContextInitializer它来自定义应用程序上下文初始化)。

于 2013-06-28T13:30:32.530 回答
1

一种方法是使用 Spring bean 配置文件,将数据源 bean 设置为在特定配置文件处于活动状态时激活,这样:

<beans profile="myprofile">
<jee:jndi-lookup id="myDataSource" jndi-name="jdbc/mydb"
        resource-ref="true" expected-type="javax.sql.DataSource" />
</beans>

有多种方法可以激活此配置文件,如果您有 Web 应用程序,您可以通过以下方式激活它:

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>spring.profiles.active</param-name>
        <param-value>myprofile</param-value>
    </init-param>
</servlet>
于 2013-06-28T13:31:05.497 回答
1

我认为您想要的是弹簧型材。它们是这样使用的:

<beans profile="dev">
    <!-- ... -->
</beans>
<beans profile="prod">
    <jee:jndi-lookup id="myDataSource" jndi-name="jdbc/mydb" />
</beans>

然后您启用一个或多个具有系统属性的配置文件:-Dspring.profiles.active=dev. 这在春季 3.1 中可用。

于 2013-06-28T13:33:10.567 回答