【问题标题】:How to configure different data sources for local testing and deployment in Spring Boot ApplicationSpring Boot Application中如何为本地测试和部署配置不同的数据源
【发布时间】:2017-03-14 00:17:02
【问题描述】:

我正在尝试寻找最佳方式来配置我的 Spring Boot Web 应用程序,以便在以下数据源之间轻松切换以进行本地测试和部署。

  1. 内存数据库中的 H2。仅限本地测试。
  2. 开发预言机。本地测试和部署。
  3. 产品预言机。仅限部署。

本地测试是指在 IDE 环境(Eclipse)中进行测试。 Dev 和 prod oracle 数据库设置在两个远程服务器上。

经过一些研究,从一个数据源切换到另一个数据源有不同的方法。

  1. 使用弹簧配置文件。 Using H2 and Oracle with Spring Boot。在类路径、application.properties、application-h2 中设置以下文件。属性和应用程序-dev.properties。虽然 h2 和 dev 的连接在相应的属性文件中定义,spring.profiles.active 在 application.properties 中设置。我的理解是在构建过程中可以通过指定spring.profiles.active 覆盖这个属性。但是,它似乎是一个JVM变量,我如何设置它运行maven
  2. Maven 配置文件。在 pom 中创建多个配置文件和指向应用程序属性文件的过滤器。在 maven 构建期间由-P 选项指定的配置文件将确定要查看的应用程序属性文件。但是,根据maven application with multi environment configuration can't deploy on tomcat 的说法,这将为不同的部署产生多个战争。所以首选方法1。另外,它不适用于在本地测试时切换数据源。
  3. 持久性单位。在persistence.xml 中为不同的数据源定义不同的持久化单元。通过选择特定单位来使用 EntityManager。此方法的变体包括在单元名称中使用一个变量,该变量在 application.properties 中确定。
  4. JNDI 查找。在 application.properties 中使用 spring.datasource.jndi-name 设置 jndi 名称。包括 url 和凭据在内的实际数据库信息将在将部署战争的 tomcat 文件夹中的 context.xml 中指定。

我的注意力集中在本地测试环境上。将采用方法 1。只需更改 application.properties 中的属性,即可轻松在内存中的 H2 和 oracle 之间切换。由于测试通常在 IDE 中完成,因此不需要生成 war,尽管欢迎使用 spring.profiles.active 运行 maven install 来回答。

就部署而言,JNDI 绝对是要走的路。但是,我担心 application.properties 中的两个属性:spring.profiles.activespring.datasource.jndi-name 可能会相互冲突。如果我有spring.profiles.active=h2 然后尝试将战争部署到 prod 服务器,它是尝试基于 spring 配置文件连接到 h2 还是基于 jdni-name 连接到 prod db?以足够的灵活性适应所有场景的最佳实践是什么?

还需要一个显式的DataSource 配置类,例如Configure Mutiple DataSource in Spring Boot with JNDI?我的理解是 application.properties 和 spring profile 应该足够处理了吧?

【问题讨论】:

    标签: spring-boot persistence datasource jndi spring-profiles


    【解决方案1】:
    • 一定要使用 Spring 配置文件。
    • 您不想使用 Maven 配置文件,因为它会创建不同的工件。问问你的 QA/Release 工程师他们对不同环境的不同工件的感受:)。他们不会高兴的。
    • H2 也是您希望在 CI 服务器集成测试中使用的。这种集成测试既快速又简单。
    • 不要更改application.properties 中的配置文件,而是考虑通过命令行参数定义配置文件。因此,无需更改配置文件即可在不同的配置文件中运行您的应用程序。

    【讨论】:

    • 你能解决两个关键问题吗?运行 mvn 时如何通过命令行定义配置文件? spring.profiles.active 似乎是一个 JVM 参数,可以使用 java -Dspring.profiles.active 运行。我如何将它传递给maven?至于 jndi,我是否应该创建另一个名为 application-jndi.properties 的配置文件,其中指定了 jndi 名称?
    • 正如我所提到的,使用不同的配置文件进行构建是不好的做法。避免使用 Maven 配置文件。使用弹簧配置文件。是的,通过命令行传递它。如果您不需要将应用托管在某个共享容器上,请忘记 JNDI。
    • 这不是一个jar应用,它是一个在tomcat中部署为war的web应用。我应该如何通过命令行传递弹簧配置文件?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 2021-07-28
    • 2019-05-06
    • 2023-03-15
    • 2017-05-25
    • 2015-03-21
    相关资源
    最近更新 更多