当前位置: 首页 > 面试题库 >

用于本地主机,开发和生产的Spring数据源配置

濮阳品
2023-03-14
问题内容

我试图弄清楚我的Spring应用程序如何确定它的部署位置并加载适当的数据源。我们有3个环境…我的本地环境,开发服务器和生产服务器。到目前为止,我有3个名为

localhost.datasource.properties
development.datasource.properties
production.datasource.properties

我让他们像这样配置:

    <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:/resources/properties/production.datasource.properties</value>
                <value>classpath:/resources/properties/development.datasource.properties</value>
                <value>classpath:/resources/properties/localhost.datasource.properties</value>
            </list>
        </property>
    </bean>

    <bean id="dataSourceMySQL" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"
        p:driverClassName="${mysql.jdbc.driver.class.name}"
        p:url="${mysql.jdbc.url}"
        p:username="${mysql.jdbc.username}"
        p:password="${mysql.jdbc.password}" />

</beans>

当我在本地主机上时,这工作正常。如果我将war文件部署到开发中,则它仍在读取localhost属性,因为它位于列表的最后,并且出现错误。实现此目的的最佳方法是什么?

谢谢


问题答案:

对于数据源,最简单的方法是定义数据源并让容器管理连接池。

为此,请在web.xml中定义对数据源的资源引用

<resource-ref>
  <description>DB Connection</description>
  <res-ref-name>jdbc/MyDataSource</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
</resource-ref>

并在春季这样引用它:

<jee:jndi-lookup 
     id="dataSource" 
     jndi-name="jdbc/MyDataSource" />

然后您可以在应用程序服务器中定义数据源,这意味着您可以更改基础数据库。对于Websphere,这将通过Websphere控制台完成。如果是tomcat,则可以通过Context.xml完成​​:

<Context>
    ...
  <Resource name="jdbc/MyDataSource" auth="Container" type="javax.sql.DataSource"
            maxActive="100" maxIdle="30" maxWait="10000"
            username="javauser" password="javadude"
            driverClassName="com.mysql.jdbc.Driver"
            url="jdbc:mysql://localhost:3306/javatest"/>
</Context>

这样,您只需更改上下文即可部署到开发,测试和生产中,而无需将您的应用程序绑定到特定的数据库。



 类似资料:
  • 本质上,它的工作原理是服务器在http://example.com/message上从Twilio接收一个POST请求,该请求包含文本消息的正文。它将它写入~/app/.data/color.tmp的临时文件,客户端通过对http://example.com/color的jQuery.get()调用访问该文件,该调用返回 所以问题来了:我有一个版本的应用程序在Glitch.me上工作,所以我知道这

  • 我正在尝试在我的一个项目中使用我自己的包(让我们称之为数据库)。但是,由于我自己正在开发项目旁边的数据库,所以我不想将数据库的一个版本推到注册表,然后再拉到项目上以获得最新的版本。鉴于两个项目都在同一个VS工作区中,这不是一个快速的工作流。 我需要的是在开发时引用本地项目,当它是关于生产时,那么我需要实际使用一个外挂包。是否有一种方法允许我根据环境使用相同包的不同包版本? 我希望有一个NodeJS

  • 我们有一个包含对象集合的开发服务器。这些对象的实际积累是一个持续的过程,在这个本地开发服务器上运行标签、验证等的整个过程。一旦这些对象准备好生产,它们就会被添加到生产数据库中,从那时起,生产数据库将在其计算中使用它们。 我正在寻找一种简单地将增量(新对象)添加到生产数据库中的方法,同时将所有其他集合和旧对象保留在同一个集合中。到目前为止,我们一直使用MySql,所以这个过程只涉及运行数据库结构和数

  • 问题内容: 当我尝试从to进行AJAX调用时,它将引发以下错误。 XMLHttpRequest无法加载 http:// localhost:8000 / project / login / uid = bimt; token = KAMWMS151UWP67Q 。Access- Control-Allow-Origin不允许使用原始http:// localhost。 问题答案: 由于端口不同,因

  • 问题内容: 术语“ jta-datasource”和“ resource-local datasource”对我来说有点模糊。我放下我的理解(或假设),我想让你说一下我是对还是错。 可以将同一数据库称为jta数据源或资源本地数据源 如果提到为jta-datasource,那么Bean /其他类可以使用JTA。因此,UserTransaction接口 如果数据源是本地资源,则无法使用CMT / BM

  • 问题内容: 我将docker用于laravel项目的开发和生产。我用于开发和生产的dockerfile略有不同。例如,我在开发环境中将本地目录安装到docker容器中,因此我不需要为代码中的每个更改进行docker构建。 由于挂载目录仅在运行docker容器时可用,因此无法在开发文件中将诸如“ composer install”或“ npm install”之类的命令放入dockerfile中。