Skip to content

Commit eade0fc

Browse files
committed
add atomikos
1 parent ec5d9c6 commit eade0fc

File tree

16 files changed

+487
-0
lines changed

16 files changed

+487
-0
lines changed

spring-boot-atomikos/pom.xml

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
6+
<groupId>com.neo</groupId>
7+
<artifactId>spring-boot-atomikos</artifactId>
8+
<version>1.0</version>
9+
<packaging>jar</packaging>
10+
11+
<name>spring-boot-atomikos</name>
12+
<description>Demo project for Spring Boot</description>
13+
14+
<parent>
15+
<groupId>org.springframework.boot</groupId>
16+
<artifactId>spring-boot-starter-parent</artifactId>
17+
<version>2.0.0.RELEASE</version>
18+
<relativePath/> <!-- lookup parent from repository -->
19+
</parent>
20+
21+
<properties>
22+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
23+
<java.version>1.8</java.version>
24+
</properties>
25+
26+
<dependencies>
27+
<dependency>
28+
<groupId>org.springframework.boot</groupId>
29+
<artifactId>spring-boot-starter-web</artifactId>
30+
</dependency>
31+
<dependency>
32+
<groupId>org.springframework.boot</groupId>
33+
<artifactId>spring-boot-starter-data-jpa</artifactId>
34+
</dependency>
35+
<dependency>
36+
<groupId>org.springframework.boot</groupId>
37+
<artifactId>spring-boot-starter-jta-atomikos</artifactId>
38+
</dependency>
39+
<dependency>
40+
<groupId>mysql</groupId>
41+
<artifactId>mysql-connector-java</artifactId>
42+
</dependency>
43+
<dependency>
44+
<groupId>org.springframework.boot</groupId>
45+
<artifactId>spring-boot-starter-test</artifactId>
46+
<scope>test</scope>
47+
</dependency>
48+
</dependencies>
49+
50+
<build>
51+
<plugins>
52+
<plugin>
53+
<groupId>org.springframework.boot</groupId>
54+
<artifactId>spring-boot-maven-plugin</artifactId>
55+
</plugin>
56+
</plugins>
57+
</build>
58+
59+
60+
</project>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
3+
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_5" inherit-compiler-output="false">
4+
<output url="file://$MODULE_DIR$/target/classes" />
5+
<output-test url="file://$MODULE_DIR$/target/test-classes" />
6+
<content url="file://$MODULE_DIR$">
7+
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
8+
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
9+
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
10+
<excludeFolder url="file://$MODULE_DIR$/target" />
11+
</content>
12+
<orderEntry type="inheritedJdk" />
13+
<orderEntry type="sourceFolder" forTests="false" />
14+
</component>
15+
</module>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.neo;
2+
3+
import org.springframework.boot.SpringApplication;
4+
import org.springframework.boot.autoconfigure.SpringBootApplication;
5+
6+
@SpringBootApplication
7+
public class JtaAtomikosApplication {
8+
9+
public static void main(String[] args) {
10+
SpringApplication.run(JtaAtomikosApplication.class, args);
11+
}
12+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.neo.config;
2+
3+
import org.springframework.beans.factory.annotation.Qualifier;
4+
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
5+
import org.springframework.boot.context.properties.ConfigurationProperties;
6+
import org.springframework.context.annotation.Bean;
7+
import org.springframework.context.annotation.Configuration;
8+
import org.springframework.context.annotation.Primary;
9+
10+
import javax.sql.DataSource;
11+
12+
@Configuration
13+
public class DataSourceConfig {
14+
15+
@Bean(name = "primaryDataSource")
16+
@Qualifier("primaryDataSource")
17+
@ConfigurationProperties(prefix="spring.primary.datasource")
18+
public DataSource primaryDataSource() {
19+
return new AtomikosDataSourceBean();
20+
}
21+
22+
@Bean(name = "secondaryDataSource")
23+
@Qualifier("secondaryDataSource")
24+
@Primary
25+
@ConfigurationProperties(prefix="spring.secondary.datasource")
26+
public DataSource secondaryDataSource() {
27+
return new AtomikosDataSourceBean();
28+
}
29+
30+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package com.neo.config;
2+
3+
import java.util.Map;
4+
5+
import javax.persistence.EntityManager;
6+
import javax.sql.DataSource;
7+
8+
import org.springframework.beans.factory.annotation.Autowired;
9+
import org.springframework.beans.factory.annotation.Qualifier;
10+
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
11+
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
12+
import org.springframework.context.annotation.Bean;
13+
import org.springframework.context.annotation.Configuration;
14+
import org.springframework.context.annotation.Primary;
15+
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
16+
import org.springframework.orm.jpa.JpaTransactionManager;
17+
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
18+
import org.springframework.transaction.PlatformTransactionManager;
19+
import org.springframework.transaction.annotation.EnableTransactionManagement;
20+
21+
@Configuration
22+
@EnableTransactionManagement
23+
@EnableJpaRepositories(
24+
entityManagerFactoryRef="entityManagerFactoryPrimary",
25+
transactionManagerRef="transactionManagerPrimary",
26+
basePackages= { "com.neo.repository.test1" })//设置dao(repo)所在位置
27+
public class PrimaryConfig {
28+
29+
@Autowired
30+
private JpaProperties jpaProperties;
31+
32+
@Autowired
33+
@Qualifier("primaryDataSource")
34+
private DataSource primaryDataSource;
35+
36+
@Bean(name = "entityManagerPrimary")
37+
@Primary
38+
public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
39+
return entityManagerFactoryPrimary(builder).getObject().createEntityManager();
40+
}
41+
42+
@Bean(name = "entityManagerFactoryPrimary")
43+
@Primary
44+
public LocalContainerEntityManagerFactoryBean entityManagerFactoryPrimary (EntityManagerFactoryBuilder builder) {
45+
return builder
46+
.dataSource(primaryDataSource)
47+
.properties(getVendorProperties(primaryDataSource))
48+
.packages("com.neo.domain") //设置实体类所在位置
49+
.persistenceUnit("primaryPersistenceUnit")
50+
.build();
51+
}
52+
53+
private Map<String, String> getVendorProperties(DataSource dataSource) {
54+
return jpaProperties.getHibernateProperties(dataSource);
55+
}
56+
57+
@Bean(name = "transactionManagerPrimary")
58+
@Primary
59+
PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) {
60+
return new JpaTransactionManager(entityManagerFactoryPrimary(builder).getObject());
61+
}
62+
63+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package com.neo.config;
2+
3+
import org.springframework.beans.factory.annotation.Autowired;
4+
import org.springframework.beans.factory.annotation.Qualifier;
5+
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
6+
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
7+
import org.springframework.context.annotation.Bean;
8+
import org.springframework.context.annotation.Configuration;
9+
import org.springframework.context.annotation.Primary;
10+
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
11+
import org.springframework.orm.jpa.JpaTransactionManager;
12+
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
13+
import org.springframework.transaction.PlatformTransactionManager;
14+
import org.springframework.transaction.annotation.EnableTransactionManagement;
15+
16+
import javax.persistence.EntityManager;
17+
import javax.sql.DataSource;
18+
import java.util.Map;
19+
20+
@Configuration
21+
@EnableTransactionManagement
22+
@EnableJpaRepositories(
23+
entityManagerFactoryRef="entityManagerFactorySecondary",
24+
transactionManagerRef="transactionManagerSecondary",
25+
basePackages= { "com.neo.repository.test2" })
26+
public class SecondaryConfig {
27+
@Autowired
28+
private JpaProperties jpaProperties;
29+
30+
@Autowired
31+
@Qualifier("secondaryDataSource")
32+
private DataSource secondaryDataSource;
33+
34+
@Bean(name = "entityManagerSecondary")
35+
public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
36+
return entityManagerFactorySecondary(builder).getObject().createEntityManager();
37+
}
38+
39+
@Bean(name = "entityManagerFactorySecondary")
40+
public LocalContainerEntityManagerFactoryBean entityManagerFactorySecondary (EntityManagerFactoryBuilder builder) {
41+
return builder
42+
.dataSource(secondaryDataSource)
43+
.properties(getVendorProperties(secondaryDataSource))
44+
.packages("com.neo.domain")
45+
.persistenceUnit("secondaryPersistenceUnit")
46+
.build();
47+
}
48+
49+
private Map<String, String> getVendorProperties(DataSource dataSource) {
50+
return jpaProperties.getHibernateProperties(dataSource);
51+
}
52+
53+
@Bean(name = "transactionManagerSecondary")
54+
PlatformTransactionManager transactionManagerSecondary(EntityManagerFactoryBuilder builder) {
55+
return new JpaTransactionManager(entityManagerFactorySecondary(builder).getObject());
56+
}
57+
58+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.neo.controller;
2+
3+
import org.springframework.web.bind.annotation.RequestMapping;
4+
import org.springframework.web.bind.annotation.RestController;
5+
6+
@RestController
7+
public class HelloController {
8+
9+
@RequestMapping("/")
10+
public String index() {
11+
return "Hello Spring Boot 2.0!";
12+
}
13+
}
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package com.neo.domain;
2+
3+
4+
5+
import javax.persistence.Column;
6+
import javax.persistence.Entity;
7+
import javax.persistence.GeneratedValue;
8+
import javax.persistence.Id;
9+
10+
import java.io.Serializable;
11+
12+
@Entity
13+
public class User implements Serializable {
14+
15+
private static final long serialVersionUID = 1L;
16+
@Id
17+
@GeneratedValue
18+
private Long id;
19+
@Column(nullable = false, unique = true)
20+
private String userName;
21+
@Column(nullable = false)
22+
private String passWord;
23+
@Column(nullable = false, unique = true)
24+
private String email;
25+
@Column(nullable = true, unique = true)
26+
private String nickName;
27+
@Column(nullable = false)
28+
private String regTime;
29+
30+
public User() {
31+
}
32+
33+
public User(String userName, String passWord, String email, String nickName, String regTime) {
34+
this.userName = userName;
35+
this.passWord = passWord;
36+
this.email = email;
37+
this.nickName = nickName;
38+
this.regTime = regTime;
39+
}
40+
41+
public Long getId() {
42+
return id;
43+
}
44+
45+
public void setId(Long id) {
46+
this.id = id;
47+
}
48+
49+
public String getUserName() {
50+
return userName;
51+
}
52+
53+
public void setUserName(String userName) {
54+
this.userName = userName;
55+
}
56+
57+
public String getPassWord() {
58+
return passWord;
59+
}
60+
61+
public void setPassWord(String passWord) {
62+
this.passWord = passWord;
63+
}
64+
65+
public String getEmail() {
66+
return email;
67+
}
68+
69+
public void setEmail(String email) {
70+
this.email = email;
71+
}
72+
73+
public String getNickName() {
74+
return nickName;
75+
}
76+
77+
public void setNickName(String nickName) {
78+
this.nickName = nickName;
79+
}
80+
81+
public String getRegTime() {
82+
return regTime;
83+
}
84+
85+
public void setRegTime(String regTime) {
86+
this.regTime = regTime;
87+
}
88+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.neo.repository.test1;
2+
3+
import com.neo.domain.User;
4+
import org.springframework.data.domain.Page;
5+
import org.springframework.data.domain.Pageable;
6+
import org.springframework.data.jpa.repository.JpaRepository;
7+
import org.springframework.data.jpa.repository.Modifying;
8+
import org.springframework.data.jpa.repository.Query;
9+
import org.springframework.stereotype.Component;
10+
import org.springframework.stereotype.Service;
11+
import org.springframework.transaction.annotation.Transactional;
12+
13+
import javax.annotation.Resource;
14+
import java.util.List;
15+
16+
public interface UserTest1Repository extends JpaRepository<User, Long> {
17+
User findByUserName(String userName);
18+
User findByUserNameOrEmail(String username, String email);
19+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.neo.repository.test2;
2+
3+
import com.neo.domain.User;
4+
import org.springframework.data.domain.Page;
5+
import org.springframework.data.domain.Pageable;
6+
import org.springframework.data.jpa.repository.JpaRepository;
7+
import org.springframework.data.jpa.repository.Modifying;
8+
import org.springframework.data.jpa.repository.Query;
9+
import org.springframework.stereotype.Component;
10+
import org.springframework.stereotype.Service;
11+
import org.springframework.transaction.annotation.Transactional;
12+
13+
public interface UserTest2Repository extends JpaRepository<User, Long> {
14+
User findByUserName(String userName);
15+
User findByUserNameOrEmail(String username, String email);
16+
}

0 commit comments

Comments
 (0)