我´我要写一个库,做一些东西,使用spring数据。
这个想法是使用这个库的项目可以导入这个jar并使用这个库:mylib.dosomestuff()。
以这种方式使用spring是可能的,我如何在dosomestuff()方法中初始化applicationcontext,以便加载di和带有数据源的@configuration类?
public class MyLib {
@Autowired
private static SomeJpaRepository someJpaRepository;
public static void doSomeStuff(){
...init ApplicationContext....
...setup DataSources...
List<SomeEntity> someEntityList = someJpaRepository.someMethod();
}
// or
public static List<SomeEntity> getSomeEntityList() {
return someJpaRepository.finAll();
}
}
//other package
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "gxEntityManager", transactionManagerRef = "gxTransactionManager",
basePackages = "com.gx")
public class GxConfig {
@Primary
@Bean(name = "gxDataSource")
public DataSource gxDataSource() {
DataSourceBuilder dataSourceBuilderGx = null;
//..
return dataSourceBuilderGx.build();
}
@Primary
@Bean(name = "gxEntityManager")
public LocalContainerEntityManagerFactoryBean gxEntityManagerFactory(EntityManagerFactoryBuilder builder) {
return builder.dataSource(gxDataSource()).packages("com.gx").build();
}
@Primary
@Bean(name = "gxTransactionManager")
public PlatformTransactionManager gxTransactionManager(
@Qualifier("gxEntityManager") EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
}
//other package
public interface SomeEntity extends JpaRepository<SomeEntity, Long>
{
SomeEntity findById(Long id);
}
1条答案
按热度按时间rdlzhqv91#
如果您有一个根配置类,它可以简单到
别每次打电话都这么做
doStuff()
因为创建应用程序上下文是昂贵的。如果要将库用作黑匣子,我想可以使用这个独立的应用程序上下文。你可以这样做: