根据会话的环境参数设置spring引导应用程序以连接到不同的数据源

ubof19bj  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(262)

我目前正在构建一个spring-boot应用程序,它需要与三种不同的数据库环境一起工作,并以一种与环境无关的方式工作。
“dev”环境将使用本地sqlite数据库。
“uat”环境将使用postgres数据库。
“实时”环境将使用sql数据库。
加载时,我的应用程序检查是否存在环境参数:
如果没有设置,或者环境参数是dev,那么它将创建一个本地sqlite数据库,并在会话期间建立到它的连接。
如果设置为uat,则将建立到heroku postgres数据库的连接。
如果设置为live,那么将建立到mysql数据库的连接。
现在我正努力在java上概念化它。
这是我到目前为止写的代码,在这里我得到了环境参数。除此之外,我不确定要做什么。

@SpringBootApplication
public class Launcher implements CommandLineRunner {

    public static void main(String args[]) {
        SpringApplication.run(Launcher.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        String currentEnvironment = System.getenv("CURRENT_ENV");

        // if current env is null or dev, set up sqlite database (if it doesnt already exist and use this for the remainder of the session

        // if uat connect to heroku postgres db

        // if live then connect to mysql db
    }
}
zphenhs4

zphenhs41#

我认为真正的问题是:如何指定您的环境?
通过springboot,您可以使用多个应用程序属性文件。您可以使用3个文件:
application.properties(用于开发环境)
application-uat.properties(用于uat环境)
application-live.properties(对于live env)。
您也可以使用yaml文件来实现这一点。
有很多方法可以让springboot选择正确的环境属性文件。
有许多方法可以选择正确的环境文件。
例如,如果您对每个环境都使用tomcat,您可以设置spring.profiles.active属性 JAVA_OPTS="$JAVA_OPTS -Dspring.profiles.active=ENV_NAME" (在setclasspath.bat(setclasspath.sh,如果您在[l]unix上)中,环境名称可以是uat或live。

chhkpiq4

chhkpiq42#

这就是在spring中创建概要文件的目的,spring boot允许您拥有帮助您的应用程序在不同环境中运行的概要文件。
因此,在您的示例中,必须创建三个属性文件 dev.properties uat.properties live.properties 在每个属性文件中,必须设置开发所需的配置。然后只需激活你想要的配置文件。

spring.profiles.active=dev

对于每一个,我将创建一个@configuration类。

@Profile("dev")
@Configuration
public class DevConfiguration{
   ...
}

@Profile("uat")
@Configuration
public class UatConfiguration{
   ...
}

@Profile("live")
@Configuration
public class LiveConfiguration{
   ...
}

我想提一个很好的书专业 Spring 启动由费利佩古铁雷斯,它可以教你很多。

相关问题