我已經安排了一個作業,註釋@Scheduled
,該作業應該使用彈簧數據jpa處理數據並將其保存到數據庫。調用save
方法時沒有任何異常,但沒有插入數據庫。在相同的註釋方法中,我調用了findAll
方法,該方法工作正常並且獲取數據。什麼可能是一個原因?在@Scheduled中運行的作業不會調用彈簧數據jpa save
@Repository
public interface PossibleOfferLinkRepository extends PagingAndSortingRepository<PossibleOfferLink, Long> {
}
@Configuration
@ComponentScan
@EnableAutoConfiguration
@Import({Scheduler.class})
@EntityScan(basePackages="model_package")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@EnableScheduling
@ConditionalOnProperty(value= "property_name")
public class Scheduler {
...
@Scheduled(fixedRate=100000)
public void scheduleCrawlerJob() throws MalformedURLException {
Iterable<PossibleOfferLink> links = repo.findAll();
PossibleOfferLink link = repo.save(new PossibleOfferLink(new URL("...")));
}
}
Maven的
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.1.8.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.182</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>${guava.version}</version>
</dependency>
<!-- Test -->
<dependency>
<groupId>org.easytesting</groupId>
<artifactId>fest-assert</artifactId>
<version>${easytesting.version}</version>
</dependency>
</dependencies>
嘗試添加@Transactional上'scheduleCrawlerJob()' – Xstian 2014-10-29 08:35:12
我已經試過了,但仍然沒有插入。我應該設置一些命令嗎?我使用彈簧靴。 – 2014-10-29 08:39:37
我認爲有一個事務處於掛起狀態。在調試模式下,嘗試在entitymanager上執行flush()。無論如何,你可以添加更多的細節? (配置等) – Xstian 2014-10-29 08:43:17