我正在尝试构建一个简单的应用程序,该应用程序与数据库连接并在其中保存一些数据,比如说每小时一次。我在baeldung等页面上找到了一些教程,但是它们的解决方案对我不起作用。
这是我的配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.1.xsd">
<context:component-scan base-package="io.github.steve"/>
<!-- Step 4: Add support for conversion, formatting and validation support -->
<mvc:annotation-driven/>
<!-- Step 5: Define Spring MVC view resolver -->
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames" value="messages"/>
</bean>
<bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/articles?useSSL=false"/>
<property name="user" value="root"/>
<property name="password" value=""/>
<property name="minPoolSize" value="5"/>
<property name="maxPoolSize" value="20"/>
<property name="maxIdleTime" value="30000"/>
</bean>
<bean id="sessionFactoryXXX" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="myDataSource"/>
<property name="packagesToScan" value="io.github.steve.webscraping.domain"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<bean id="myTransactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactoryXXX"/>
</bean>
<tx:annotation-driven transaction-manager="myTransactionManager"/>
</beans>
ArticlesDaoImpl:
@Repository
public class ArticlesDaoImpl implements ArticlesDao {
@Autowired
SessionFactory sessionFactory;
@Override
public List<Article> getAllArticles() {
Session session = sessionFactory.getCurrentSession();
Query<Article> query = session.createQuery("from Article order by uploadDate", Article.class);
return query.getResultList();
}
@Override
public void addArticle(Article article) {
Session session = sessionFactory.getCurrentSession();
session.persist(article);
}
}
ArticlesServiceImpl:
@Service
public class ArticlesServiceImpl implements ArticlesService {
@Autowired
private ArticlesDao articlesDao;
@Override
@Transactional
public List<Article> getAllArticles() {
return articlesDao.getAllArticles();
}
@Override
@Transactional
public void addArticle(Article article) {
articlesDao.addArticle(article);
}
@Override
@Transactional
public void addArticles(List<Article> articles) {
articles.stream().forEach(articlesDao::addArticle);
}
}
现在: 首先,我不知道将xml配置文件放在哪里。 我不知道如何建立我的Main.class。我想将ArticlesService自动连线到Main类并从中运行一个方法。当我只使用SpringApplication.run(Main.class,args)时,它会加载并以退出代码1结尾。
主要应用:
@SpringBootApplication
@EnableScheduling
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
计划任务:
@Component
public class ScheduledTasks {
@Autowired
ArticlesService articlesService;
private static final Logger log = LoggerFactory.getLogger(ScheduledTasks.class);
@Scheduled(cron = "* * * * *")
public void reportCurrentTime() {
articlesService.addArticles(new MkyongWebScraper().getArticlesList());
}
}
我真的是Spring的新手,我知道这个问题涉及面很广,但是我找不到适合我任务的合适资料。我在做什么错了?
答案 0 :(得分:0)
恐怕您正在编写的代码(尤其是XML配置)没有利用Spring Boot和Spring Boot 2提供的更容易,更方便的优势。
要生成项目的框架,请转到Spring Boot Initializer。您可以选择所需的依赖项(在您的情况下,应为“ JPA”,它基于Spring Data JPA),然后您可以在项目中下载一个zip。
您可能想看看Spring Boot documentation。 youtube上还有一些非常有趣的视频“ Spring Boot入门”。
一旦有了项目,就可以添加Spring Data JPA代码... Spring Boot文档中有关于Spring Data JPA的部分,但您也可以在documentation of Spring Data JPA project中找到更多信息。
好运
答案 1 :(得分:0)
我已经解决了我的问题。我只是对Spring不够了解。对于像我这样的人,我推荐Craig Walls的《春季行动》。