Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.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:如何将配置从应用程序传递到库_Java_Spring_Spring Data Jpa_Spring Annotations - Fatal编程技术网

Java Spring:如何将配置从应用程序传递到库

Java Spring:如何将配置从应用程序传递到库,java,spring,spring-data-jpa,spring-annotations,Java,Spring,Spring Data Jpa,Spring Annotations,我正在构建一个Spring包,任何Spring应用程序都可以使用它来执行会话管理(很像NodeJS中的express会话)。这个库需要接受应用程序的JPA配置(例如数据库的url、用户名、密码和其他附加的数据源属性,就像express session一样),以及一些其他特定于库的属性。我还希望应用程序能够向库传递一个函数,如果应用程序希望使用自己的令牌生成函数,库可以调用该函数来生成令牌 我已经研究了@Imports,但是,我认为这要求将要导入的类放在同一个包中,情况并非如此,因为应用程序将是一

我正在构建一个Spring包,任何Spring应用程序都可以使用它来执行会话管理(很像NodeJS中的express会话)。这个库需要接受应用程序的JPA配置(例如数据库的url、用户名、密码和其他附加的数据源属性,就像express session一样),以及一些其他特定于库的属性。我还希望应用程序能够向库传递一个函数,如果应用程序希望使用自己的令牌生成函数,库可以调用该函数来生成令牌

我已经研究了@Imports,但是,我认为这要求将要导入的类放在同一个包中,情况并非如此,因为应用程序将是一个与库完全不同的包。是否有方法仅使用应用程序配置类的名称来搜索该类

我知道我可以要求应用程序生成application.properties文件,然后使用@EnableAutoConfiguration传递这些值,但当我还想传递函数时,这会失败。我想一种解决方法是传递一个函数名并使用反射调用它?虽然我不确定这将如何工作,我不希望这样做

这是我的配置类,它应该能够接受应用程序的配置

@Configuration
public class SuperTokensAppConfig {

    @Bean
    public DataSource dataSource() {
        // use the application's datasource here and return it
    }
这是一个具有所有必要的库特定属性和函数的接口。应用程序应该能够扩展它,我应该能够使用这个接口的名称自动连接这个bean(见下文)

下面是将使用用户生成的函数的服务

@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"})
在主应用程序中


不过,更好的解决方案是创建自己的自动配置:

哦,太好了!
@ComponentScan({"com.my.package.first","com.library.session.management.config"})