gpt4 book ai didi

java - 使用 Maven 部署 Spring-Boot 项目并进一步将其导入其他项目

转载 作者:行者123 更新时间:2023-12-04 08:41:18 27 4
gpt4 key购买 nike

所以目前,我有两个项目,比方说 Storefront 和 Dashboard,这两个项目都有相同的 POJO 类、服务和一些 API 端点。例如,考虑一个 Student 类,我们在 Storefront 和 Dashboard 中都有这个类以及它的服务类。此外,在不久的将来,我们将为客户实现另一个项目,即客户端仪表板,它将拥有几乎 90% 的相同资源。
所以我想,如果我创建一个包含所有项目所需的所有库的 maven 项目并根据需要导入它们会怎样。这将减少冗余,也将减轻其他项目的重量。我以前使用过项目内存储库和 Dropbox 作为 maven 存储库,所以这次对我来说会更容易一些。
现在的问题是:我有对应于学生的 StudentRepository,它进一步与“@Autowired”注释一起使用,对吗?据我所知,当我运行“@SpringBootApplication”时,一切都会正常工作,但正如我之前提到的,我将导入这些包,并且这样做,程序将通过 NullPointerException 导致 StudentRepository 的实例为空。

@SpringBootApplication
@EnableAutoConfiguration
@EntityScan
public class DemoApplication implements CommandLineRunner {

private Logger logger = LoggerFactory.getLogger(this.getClass());

@Autowired
StudentRepository repository;

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

@Override
public void run(String... args) throws Exception {
// This will work
logger.info("Inserting -> {}", repository.save(new Student("studentName", "primaryKey")));
}

// This won't
public void addAStudent(String studentName, String primaryKey) {
repository.save(new Student(studentName, primaryKey));
}

}
public class Test {

public static void main(String[] args) {
// This will throw a NullPointerException
new DemoApplication().addAStudent("yourNameProbably", "yourSocialSecurityNumber");
}

}
那么还有其他方法可以使这项工作吗?任何建议将不胜感激,并提前感谢。

最佳答案

假设你有一个图书馆 FooLibrary和主要应用FooApplication .这个想法正在导入FooLibraryFooApplication .
让我们从 FooLibrary 开始.所以主要有2个重要文件。这些是 FooLibraryInterfaceFooLibraryConfiguration .在这个例子中,我不会使用 FooLibraryInterface .FooLibraryInterface是一个接口(interface),它包含客户端可能需要的重要方法 overrideFooLibraryConfiguration扫描和注入(inject) FooLibrary 中的 bean .所以,下面是

public interface FooLibraryInterface {
public abstract Datasource configureDatabaseConnection();
}
FooLibraryConfiguration将如下所示:
@Configuration
@ComponentScan("package.to.scan")
public class FooLibraryConfiguration {
@Bean
public YourBean beanName() {
return new YourBean();
}
}
您可以在 FooLibrary 中添加您需要的所有内容.现在我们的库已准备好导入 FooApplicationFooLibraryConfiguration 的帮助下
@SpringBootApplication
@Import(FooLibraryConfiguration.class) //this will import all the beans defined in the library
public class FooApplication {
public static void main(String[] args) {
SpringApplication.run(FooApplication.class, args);
}
}
注意:如果您有 EntityManager托管类(实体,存储库),您应该对主应用程序中的 lib 包进行额外扫描,因为我们不需要不同的 EntityManager对于单个应用程序。或者您可以一起扫描所有文件(留下来自 @EnableJpaRepositories 或 em.setPackagesToScan("library.entities.package"); 的单独扫描与 @ComponentScan("base.library.package") )
@Configuration
@EnableJpaRepositories(basePackages = { "library.repository.package" })
@EnableTransactionManagement
public class PersistenceConfig {
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource());
em.setPackagesToScan("library.entities.package");

JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
em.setJpaProperties(additionalProperties());

return em;
}
.....
}
更新
谢谢@keshavram-kuduwa,您可以从 https://spring.io/guides/gs/multi-module/#_create_the_library_project 联系 Spring 指南

关于java - 使用 Maven 部署 Spring-Boot 项目并进一步将其导入其他项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64554436/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com