Advertisement
Guest User

Untitled

a guest
Nov 22nd, 2016
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.21 KB | None | 0 0
  1. Sleep 5 sec... Block Table
  2. Jonh (2)
  3. Jonh (1)
  4.  
  5. @SpringBootApplication
  6. @ImportResource("classpath*:applicationContext.xml")
  7. @EnableScheduling
  8. public class MyApplication {
  9. public static void main(String[] args) {
  10. SpringApplication.run(MyApplication.class, args);
  11. }
  12. }
  13.  
  14. <?xml version="1.0" encoding="UTF-8"?>
  15. <beans xmlns="http://www.springframework.org/schema/beans"
  16. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  17. xmlns:tx="http://www.springframework.org/schema/tx"
  18. xmlns:security="http://www.springframework.org/schema/security"
  19. xsi:schemaLocation="http://www.springframework.org/schema/beans
  20. http://www.springframework.org/schema/beans/spring-beans.xsd
  21. http://www.springframework.org/schema/tx
  22. http://www.springframework.org/schema/tx/spring-tx.xsd
  23. http://www.springframework.org/schema/security
  24. http://www.springframework.org/schema/security/spring-security.xsd">
  25.  
  26. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  27. <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
  28. <property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
  29. <property name="username" value="root"/>
  30. <property name="password" value="root"/>
  31. </bean>
  32.  
  33. <bean id="hibernate5AnnotatedSessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
  34. <property name="dataSource" ref="dataSource"/>
  35. <property name="configLocation" value="classpath:hibernate.cfg.xml"/>
  36. <property name="annotatedClasses">
  37. <list>
  38. <value>Person</value>
  39. </list>
  40. </property>
  41. </bean>
  42.  
  43. <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
  44. <property name="sessionFactory" ref="hibernate5AnnotatedSessionFactory"/>
  45. </bean>
  46.  
  47. <tx:annotation-driven transaction-manager="transactionManager"/>
  48.  
  49. </beans>
  50.  
  51. <?xml version='1.0' encoding='utf-8'?>
  52. <!DOCTYPE hibernate-configuration PUBLIC
  53. "-//Hibernate/Hibernate Configuration DTD//EN"
  54. "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
  55. <hibernate-configuration>
  56. <session-factory>
  57. <property name="connection.url">jdbc:mysql://localhost:3306/mydb</property>
  58. <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
  59. <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
  60. <property name="show_sql">true</property>
  61. </session-factory>
  62. </hibernate-configuration>
  63.  
  64. @Entity
  65. @Table(name = "person")
  66. public class Person {
  67. private int id;
  68. private String name;
  69.  
  70. @Id
  71. @GeneratedValue(strategy = GenerationType.IDENTITY)
  72. @Column(name = "id")
  73. public int getId() {
  74. return id;
  75. }
  76.  
  77. @Column(name = "name")
  78. public String getName() {
  79. return name;
  80. }
  81.  
  82. public void setName(String name) {
  83. this.name=name;
  84. }
  85.  
  86. @Override
  87. public String toString() {
  88. return name;
  89. }
  90. }
  91.  
  92. @Service(value = "personService")
  93. public class PersonServiceImpl implements PersonService {
  94. private PersonDAO personDAO;
  95.  
  96. @Autowired(required = true)
  97. @Qualifier(value = "personDAO")
  98. public void setPersonDAO(PersonDAO personDAO) {
  99. this.personDAO= personDAO;
  100. }
  101.  
  102. @Scheduled(fixedDelay = 60000)
  103. public void myMethod() {
  104. new Thread(new Runnable() {
  105. @Override
  106. public void run() {
  107. try {
  108. System.out.println(personDAO.getById(1).toString)+" (1)";
  109. } catch (Exception e) {
  110. e.printStackTrace();
  111. }
  112. }
  113. }).start();
  114.  
  115. // Пауза, чтобы первый поток успел обратится к таблице
  116. try {
  117. Thread.sleep(1000);
  118. } catch (InterruptedException e) {
  119. e.printStackTrace();
  120. }
  121.  
  122. new Thread(new Runnable() {
  123. @Override
  124. public void run() {
  125. try {
  126. System.out.println(personDAO.getById(1).toString+" (2)");
  127. } catch (Exception e) {
  128. e.printStackTrace();
  129. }
  130. }
  131. }).start();
  132. }
  133. }
  134.  
  135. @Repository(value = "personDAO")
  136. public class PersonDAOImplimplements PersonDAO {
  137. private SessionFactory sessionFactory;
  138.  
  139. @Autowired(required = true)
  140. @Qualifier(value = "hibernate5AnnotatedSessionFactory")
  141. public void setSessionFactory(SessionFactory sessionFactory) {
  142. this.sessionFactory = sessionFactory;
  143. }
  144.  
  145. boolean firstThread = true;
  146.  
  147. @Override
  148. @Transactional(isolation = Isolation.SERIALIZABLE)
  149. public Person getById(int id) {
  150. Person person = this.sessionFactory.getCurrentSession().get(Person.class, new Integer(id));
  151.  
  152. if(this.firstThread) {
  153. this.firstThread=false;
  154.  
  155. // Останавливаем поток. Как я понимаю никто не должен получить доступ к Таблице
  156. System.out.println("Sleep 5 sec... Block Table");
  157.  
  158. try {
  159. Thread.sleep(5000);
  160. } catch (InterruptedException e) {
  161. e.printStackTrace();
  162. }
  163. }
  164.  
  165. return person;
  166. }
  167. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement