- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个简单的 Spring Boot 应用程序,其中一个 enpoint 通过 JobLauncher bean 中配置的 SimpleAsyncTaskExecutor 异步调用 Spring Batch 作业。
Spring Batch 作业异步启动并且工作正常,但没有任何内容保存到数据库中。
如果我删除 SimpleAsyncTaskExecutor,数据就会保存。
这是我的 BatchConfigurer。这里我使用 SimpleAsyncTaskExecutor 配置 JobLauncher 。如果我删除行 simpleJobLauncher.setTaskExecutor(new SimpleAsyncTaskExecutor());//(1) 数据被保存。
@Component
public class CustomBatchConfiguration implements BatchConfigurer {
private static final Log LOGGER = LogFactory.getLog(CustomBatchConfiguration.class);
@Autowired
private BatchProperties properties;
@Autowired
private DataSource dataSource;
@Autowired
private EntityManagerFactory entityManagerFactory;
private PlatformTransactionManager transactionManager;
private JobRepository jobRepository;
private JobLauncher jobLauncher;
private JobExplorer jobExplorer;
/**
* Registers {@link JobRepository} bean.
*/
@Override
public JobRepository getJobRepository() {
return this.jobRepository;
}
/**
* Registers {@link PlatformTransactionManager} bean.
*/
@Override
public PlatformTransactionManager getTransactionManager() {
return this.transactionManager;
}
/**
* Registers {@link JobLauncher} bean.
*/
@Override
public JobLauncher getJobLauncher() {
return this.jobLauncher;
}
/**
* Registers {@link JobExplorer} bean. This bean is actually created in
* {@link BatchConfig}.
*/
@Override
public JobExplorer getJobExplorer() throws Exception {
return this.jobExplorer;
}
/**
* Initializes Spring Batch components.
*/
@PostConstruct
public void initialize() {
try {
this.transactionManager = createTransactionManager();
this.jobRepository = createJobRepository();
this.jobLauncher = createJobLauncher();
this.jobExplorer = createJobExplorer();
} catch (Exception ex) {
throw new IllegalStateException("Unable to initialize Spring Batch", ex);
}
}
private JobExplorer createJobExplorer() throws Exception {
JobExplorerFactoryBean jobExplorerFactoryBean = new JobExplorerFactoryBean();
jobExplorerFactoryBean.setDataSource(this.dataSource);
String tablePrefix = this.properties.getTablePrefix();
if (StringUtils.hasText(tablePrefix)) {
jobExplorerFactoryBean.setTablePrefix(tablePrefix);
}
jobExplorerFactoryBean.afterPropertiesSet();
return jobExplorerFactoryBean.getObject();
}
private JobLauncher createJobLauncher() throws Exception {
SimpleJobLauncher simpleJobLauncher = new SimpleJobLauncher();
simpleJobLauncher.setJobRepository(getJobRepository());
simpleJobLauncher.setTaskExecutor(new SimpleAsyncTaskExecutor()); // (1)
simpleJobLauncher.afterPropertiesSet();
return simpleJobLauncher;
}
private JobRepository createJobRepository() throws Exception {
JobRepositoryFactoryBean jobRepositoryFactoryBean = new JobRepositoryFactoryBean();
jobRepositoryFactoryBean.setDatabaseType("db2");
jobRepositoryFactoryBean.setDataSource(this.dataSource);
if (this.entityManagerFactory != null) {
LOGGER.warn("JPA does not support custom isolation levels, so locks may not be taken when launching Jobs");
jobRepositoryFactoryBean.setIsolationLevelForCreate("ISOLATION_DEFAULT");
}
String tablePrefix = this.properties.getTablePrefix();
if (StringUtils.hasText(tablePrefix)) {
jobRepositoryFactoryBean.setTablePrefix(tablePrefix);
}
jobRepositoryFactoryBean.setTransactionManager(getTransactionManager());
jobRepositoryFactoryBean.afterPropertiesSet();
return jobRepositoryFactoryBean.getObject();
}
private PlatformTransactionManager createTransactionManager() {
return new DataSourceTransactionManager(dataSource);
}
}
这是我的 BatchConfiguration。
@Autowired(required = true)
private MyItemReader myItemReader;
@Autowired(required = true)
private MyItemProcessor myItemProcessor;
@Autowired(required = true)
private MyItemWriter myItemWriter;
@Bean
public Step myStep(TaskExecutor taskExecutor) {
return stepBuilderFactory.get("myStepName")
.<SomeWrapper, SomeWrapper>chunk(
1)
.reader(myItemReader)
.processor(myItemProcessor).writer(myItemWriter)
.build();
}
@Bean(name = "myJob")
public Job myJob(Step myStep) {
return jobBuilderFactory.get("myJobName").incrementer(new RunIdIncrementer())
.flow(myStep).end().build();
}
我错过了什么吗?
提前致谢
最佳答案
我执行了以下操作来解决我的问题:
在 CustomBatchConfiguration
中,我更改了以下内容
private PlatformTransactionManager createTransactionManager() {
return new DataSourceTransactionManager(dataSource);
}
至
private PlatformTransactionManager createTransactionManager() {
if (this.entityManagerFactory != null) {
return new JpaTransactionManager(this.entityManagerFactory);
}
return new DataSourceTransactionManager(this.dataSource);
}
我使用了spring JpaTransactionManager。
我将 JobLauncher TaskExecutor 更改为
simpleJobLauncher.setTaskExecutor(new SimpleAsyncTaskExecutor());
至
ThreadPoolTaskExecutor threadPoolExecutor = new ThreadPoolTaskExecutor();
threadPoolExecutor.setMaxPoolSize(springBatchJobThreadPollMaxSize);
threadPoolExecutor.afterPropertiesSet();
TaskExecutor taskExecutor = new DelegatingSecurityContextAsyncTaskExecutor(threadPoolExecutor);
创建更强大的线程池并在它们之间共享 spring 安全上下文。
关于java - 带有 SimpleAsyncTaskExecutor 的 Spring Batch 未保存到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61553610/
我开发了一个 spring batch 应用程序,它使用批处理/shell 脚本部署为可执行 jar。它工作正常。 最近我读到有关 spring batch admin 应用程序发布的信息。根据他们的
我想要的是一个 bat 文件来等待一定时间的输入。如果没有输入,我希望它转到 somethingidk。 这是我目前所拥有的。 @echo off :START cls timeout 10 set
我最近尝试在不使用外部命令或工具的情况下批量编写一个程序来计算任何实数(而不是负数)的平方根,该程序基于可以在这里找到的算法:Link1 编辑:我修复了大部分问题,但仍然有一个我没有发现的轻微问题。
我有一个简单的批处理文件,它将遍历所有* Test.htm文件并进行复制。一些文件将包含我不想复制的字符串。 FOR /R "C:\" %%g IN (*Test.htm) DO ( echo %%
这可能简短而有趣,但我只是在检查。 批处理 for 命令可以有一个递增的步长值吗? @echo off SetLocal EnableDelayedExpansion set xyz=200 for
目前我正处于批处理 hell 中。我想通过批处理文件调用我的 powershell 脚本。只要路径中没有空格,这就可以正常工作。例如,这是有效的 set DATAPATH="%~1
试图找到以前是否有人问过这个问题,但找不到。 问题来了。以下必须通过Spring批处理来实现有一个文件需要读取和处理。项目阅读器不是线程安全的。计划是让多线程同质处理器和多线程同质写入器插入由单线程读
这里有同样的问题- Spring batch pause/resume vs stop/restart 我在 Spring 检查了 BatchStatus 枚举,没有可用的状态 PAUSED,它仅作为
因此,我目前有这批使用 ffmpeg 将当前文件夹上的每个 .MTS 转换为 .MP4,但是当它完成后,我会在文件夹中同时获得 .mp4 和 .mts。 我有 2 个批处理,一个用于转换文件,另一个用
我需要每周一次将 CSV 加载到数据库中。由于 CSV 文件包含 2 个表的数据,因此需要进行一些数据处理。因此,我将不得不稍微处理一下 CSV 文件,可能会将其转换为 2 个不同的 CSV 文件并将
我有一个澄清。 我们是否可以同时运行一个作业的多个实例。 目前,我们在任何给定时间都有一个作业实例。 如果可能,请告诉我如何做。 最佳答案 是的你可以。 Spring Batch 根据 JobPara
我想跳过一些过程记录。 我尝试过的是,我创建了自定义异常并在我想跳过记录时抛出异常,并且它调用了 onSkipInProcess 方法的跳过监听器。它工作正常。 请找到配置。
任何人都可以启发我一种方法来阻止我的 bat 在执行时在屏幕上闪烁吗?有没有办法阻止 CMD 窗口执行此操作???? 最佳答案 只是一个猜测,但要防止窗口在看不到打印内容的情况下立即打开和关闭,请在批
我需要一个批处理文件来向 windows 中的主机文件添加一条记录,但是我不需要只添加文件,因为我想检查该记录是否已经存在。有可能吗? 最佳答案 type "%SystemRoot%\system32
我试图了解 Spring Batch 如何进行事务管理。这不是技术问题,而是概念问题:Spring Batch 使用什么方法以及该方法的后果是什么? 让我试着澄清一下这个问题。例如,查看 Taskle
我需要知道如何从用户输入的文件中提取目录信息,以下面的代码为例: ECHO Drag and drop your .txt file here, after that press Enter: SET
首先是问题陈述:我在我的 DEV 环境中使用 Spring-Batch 很好。当我将代码移至生产环境时,我遇到了问题。在我的 DEV 环境中,Spring-Batch 能够毫无问题地在我们的 DB2
你好 我是 Spring Batch 领域的新手,最近几天我花了一些时间观看 Michael Minella 的 youtube 视频,阅读了一些文档并成功运行了我在互联网上找到的一些演示项目。我认为
我正在研究使用 spring 批处理来处理编码压缩文件中的记录。记录是可变长度的,其中编码了嵌套的可变长度数据字段。 我是 Spring 和 Spring Batch 的新手,这就是我计划构建批处理配
我正在尝试批量删除字符串中的第一个单词。 示例:“这个 child 喜欢批处理”到“ child 喜欢批处理” 我试过: @echo off set /p text=text: for /f "tok
我是一名优秀的程序员,十分优秀!