作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个从数据库存储库读取数据的 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 个部分:
第一个确保创建 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/
我是一名优秀的程序员,十分优秀!