gpt4 book ai didi

java - 如何将命令行应用程序添加到我的 Spring Boot Rest 应用程序

转载 作者:行者123 更新时间:2023-12-02 11:02:09 24 4
gpt4 key购买 nike

我有一个从数据库存储库读取数据的 REST 应用程序。

我想添加一个命令行应用程序来读取 CSV 并将数据导入数据库。

如果我向项目/jar 添加另一个实现 CommandLineRunner@SpringBootApplication 类,Spring 会与我的主服务器同时启动它。

如果我添加一个初始化 spring 上下文本身的类,JPARepository 上的 jdbc url 将使用默认值,而不是 spring boot 属性中的默认值

spring.datasource.url=jdbc:h2:file:./test;AUTO_SERVER=TRUE;DB_CLOSE_ON_EXIT=FALSE

@ComponentScan(basePackages = "com.test")
public class CsvImport {

@Autowired
private Repository repository;

public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(CsvImport.class);
context.start();

CsvImport csvImport = context.getBean(CsvImport.class);
File file = new File(args[0]);
if (file.isFile()) {
csvImport.importCsv(file);
}
context.stop();
}

private void importCsv(File file) {
....
....

有更好的方法吗?

最佳答案

要实现此功能,需要执行几个步骤。

第一件事是,@SpringBootApplication 自动扫描其下面的任何包,并自动启动它找到的任何 CommandLineRunner,因此命令行应用程序需要位于并行包中。

例如

- com
- test
- rest
- model
- repository
- controller
#RestSpringBoot.java
- Commands
#ImportCsv.java

接下来的事情是,由于命令行应用程序位于并行包中,因此您需要自己指定扫描。

这有 3 个部分:

  • @ComponentScan
  • @EntityScan
  • @EnableJpaRepositories

第一个确保创建 Bean,第二个确保创建 Hibernate 实体,第三个确保正确生成 JPA 类。

最后一部分是禁用 Spring Boot Web 服务器的启动,否则会出现端口冲突。

最终结果是:

@SpringBootApplication
@ComponentScan(basePackageClasses = {Repository.class})
@EntityScan(basePackageClasses = {MyEntity.class})
@EnableJpaRepositories(basePackageClasses = {Repository.class})
public class CsvImport {

@Autowired
private RiskRepository repository;

public static void main(String[] args) {
SpringApplication app = new SpringApplication(CsvImport.class);
app.setBannerMode(Banner.Mode.OFF);
app.setWebApplicationType(WebApplicationType.NONE);
app.run(args);
}

@Override
public void run(String... args) throws Exception {
File file = new File(args[0]);
if (file.isFile()) {
importCsv(file);
}
}

private void importCsv(File file) {
....
....

关于java - 如何将命令行应用程序添加到我的 Spring Boot Rest 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51252858/

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