Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.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/2/spring/13.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 Spring boot,如何组织多个特定于概要文件的数据源_Java_Spring_Spring Boot_Configuration_Spring Data Jpa - Fatal编程技术网

Java Spring boot,如何组织多个特定于概要文件的数据源

Java Spring boot,如何组织多个特定于概要文件的数据源,java,spring,spring-boot,configuration,spring-data-jpa,Java,Spring,Spring Boot,Configuration,Spring Data Jpa,我缺乏可靠的模式和参考,如何在SpringBoot中组织特定于概要文件的安全性和持久性配置,在SpringBoot中,多个特定于概要文件的数据源可能在不同的上下文中共存 假设我有三个maven配置文件:dev、qa、prod,它们分别为数据库连接、JPA配置、日志记录等定义了不同的属性 使用devbuild,Spring应该根据启动时填充的内存映射对用户进行身份验证。这很容易使用AuthenticationManagerBuilder接口实现 然而,对于qa和prod构建,应该根据数据库对用户进

我缺乏可靠的模式和参考,如何在SpringBoot中组织特定于概要文件的安全性和持久性配置,在SpringBoot中,多个特定于概要文件的数据源可能在不同的上下文中共存

假设我有三个maven配置文件:dev、qa、prod,它们分别为数据库连接、JPA配置、日志记录等定义了不同的属性

使用devbuild,Spring应该根据启动时填充的内存映射对用户进行身份验证。这很容易使用AuthenticationManagerBuilder接口实现

然而,对于qa和prod构建,应该根据数据库对用户进行身份验证。现在,Spring应该使用特定于概要文件的连接参数配置一个数据源,并在UserDetailsService中使用这个特定的数据源,检索身份验证机制的凭据。我知道如何创建必要的bean,但问题是:

一个重要事实是,用户数据源不同于实际的业务实体数据源。我如何在安全配置中定义特定于概要文件的数据源,并将此特定数据源的范围与安全配置联系起来,使用户DAO(Spring Data JPA repository或injected EntityManager)使用这个数据源?这就是所谓持久化单元的概念发挥作用的地方吗

另外,在基类中配置HttpSecurity,并从使用AuthenticationManagerBuilder或定义数据源bean的此类扩展特定于概要文件的配置,这是否是一个好主意

另一个问题是,如何基于maven配置文件启用Spring配置文件?我认为对这两个变量使用公共分母是个坏主意,因为maven profile通过变量激活是一对一的,其中as spring.profiles.active可能会列出多个概要文件。首先,将maven概要文件和Spring概要文件混合使用是一个好主意,还是有更好的方法来组织事情


我知道这是一个广泛的问题,但这是一个广泛的主题,我需要掌握。有针对这些问题的好例子吗?

首先,您不应该为不同的环境构建不同的工件。基本上,这意味着您正在将未经测试的代码投入生产。如果要为不同的环境进行不同的配置,请将它们放在不同的
应用程序-[profile].properties
中,并为它们创建单独的
@Configuration
文件。您可以创建一个应用程序侦听器,检查是否只选择了您允许的配置文件中的一个,如果有多个,则会失败。我同意@M.Deinum,我认为您应该尽量避免在不同的环境中使用maven概要文件,除非您有一个强烈的论点,即为了不同的目的以不同的方式构建工件(例如:运行不同的插件,使用不同的依赖项集等等)。但是,不要忘记,无论您最终构建什么,都将是一个不同的工件,并且应该经历一个单独的测试过程。对于spring引导,我更喜欢使用带有单独spring配置文件的
yml
配置,用于单独的环境。如果需要以不同的方式配置bean,可以使用带有
@Profile
@configuration
文件指定哪个配置文件触发该配置的激活或停用
@Configuration@Profile(“production”)公共类ProductionConfiguration{/…}
使用maven配置文件的唯一原因是将连接和基础结构属性外部化,所以也许您只需坚持使用spring配置文件是对的。@burcakulug我知道,但主要的问题是如何在不同的上下文(身份验证、业务实体)中处理多个数据源,以及如何组织不同的配置类(例如,我应该从所有概要文件都通用的基本配置继承)