Spring: 如何将配置从应用程序传递到库
Spring: How to pass configuration from application to library
我正在构建一个 Spring 包,任何 Spring 应用程序都可以使用它来执行会话管理(很像 NodeJS 中的快速会话)。这个库需要接受应用程序的 JPA 配置(例如 url 数据库、用户名、密码和其他额外的数据源属性,就像 express-session 一样),以及一些其他特定于库的属性。我还希望应用程序能够将函数传递给库,如果应用程序希望使用自己的令牌生成函数,库可以调用该函数来生成令牌。
我查看了@Imports,但是,我认为这需要将要导入的 class 放在同一个包中,但情况并非如此,因为应用程序将完全不同包比图书馆。有没有一种方法可以仅使用其名称来搜索应用程序配置 class?
我知道我可以要求应用程序制作一个 application.properties 文件,然后使用 @EnableAutoConfiguration 来传递这些值,但是当我还想传递一个函数时,这会失败。我想解决这个问题的方法是传递一个函数名并使用反射调用它?虽然我不确定这将如何工作,但我不想那样做。
这是我的配置 class 它应该能够接受应用程序的配置
@Configuration
public class SuperTokensAppConfig {
@Bean
public DataSource dataSource() {
// use the application's datasource here and return it
}
这是具有所有必要的特定于库的属性和函数的接口。应用程序应该能够扩展它,我应该能够使用这个接口的名称自动装配那个 bean(见下文)
public interface SuperTokensAccessKeyConfig {
public String userFunction();
public boolean dynamic;
...
}
这是将使用用户生成的函数的服务
@Service
public class AccessTokenKey {
...
@Autowired
private SuperTokensAccessKeyConfig userConfig = null; // this would have the function I need
private String useUserFunction() {
return userConfig.userFunction();
}
}
通过
从您的库中引入配置、服务、回购包...
@ComponentScan({"com.my.package.first","com.library.session.management.config"})
在您的主应用程序中。
不过,更好的解决方案是创建您自己的自动配置:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-auto-configuration.html
我正在构建一个 Spring 包,任何 Spring 应用程序都可以使用它来执行会话管理(很像 NodeJS 中的快速会话)。这个库需要接受应用程序的 JPA 配置(例如 url 数据库、用户名、密码和其他额外的数据源属性,就像 express-session 一样),以及一些其他特定于库的属性。我还希望应用程序能够将函数传递给库,如果应用程序希望使用自己的令牌生成函数,库可以调用该函数来生成令牌。
我查看了@Imports,但是,我认为这需要将要导入的 class 放在同一个包中,但情况并非如此,因为应用程序将完全不同包比图书馆。有没有一种方法可以仅使用其名称来搜索应用程序配置 class?
我知道我可以要求应用程序制作一个 application.properties 文件,然后使用 @EnableAutoConfiguration 来传递这些值,但是当我还想传递一个函数时,这会失败。我想解决这个问题的方法是传递一个函数名并使用反射调用它?虽然我不确定这将如何工作,但我不想那样做。
这是我的配置 class 它应该能够接受应用程序的配置
@Configuration
public class SuperTokensAppConfig {
@Bean
public DataSource dataSource() {
// use the application's datasource here and return it
}
这是具有所有必要的特定于库的属性和函数的接口。应用程序应该能够扩展它,我应该能够使用这个接口的名称自动装配那个 bean(见下文)
public interface SuperTokensAccessKeyConfig {
public String userFunction();
public boolean dynamic;
...
}
这是将使用用户生成的函数的服务
@Service
public class AccessTokenKey {
...
@Autowired
private SuperTokensAccessKeyConfig userConfig = null; // this would have the function I need
private String useUserFunction() {
return userConfig.userFunction();
}
}
通过
从您的库中引入配置、服务、回购包...@ComponentScan({"com.my.package.first","com.library.session.management.config"})
在您的主应用程序中。
不过,更好的解决方案是创建您自己的自动配置:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-auto-configuration.html