- Structure
- application.yml
spring: application: name: jpa-project datasource: url: jdbc:log4jdbc:mysql:replication://localhost,192.168.1.5:3306/test?useSSL=false driver-class-name: net.sf.log4jdbc.DriverSpy username: user password: password logging: level: jdbc: sqltiming: info audit: fatal resultset: fatal sqlonly: fatal connection: fatal
- JpaApplication.java
package org.blog.test; package org.blog.test; import lombok.extern.slf4j.Slf4j; import org.blog.test.user.entity.User; import org.blog.test.user.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @Slf4j public class JpaApplication implements CommandLineRunner { public static void main(String[] args) { SpringApplication.run(JpaApplication.class, args); } @Autowired private UserService userService; @Override public void run(String... args) throws Exception { User user = userService.getUser("name1"); log.info("master : {}", user); User user1 = userService.getUserFromSlave("name1"); log.info("slave : {}", user1); } }
- user.java
package org.blog.test.user.entity; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import javax.persistence.*; @Table @Entity @Data @NoArgsConstructor @AllArgsConstructor public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column private Long id; @Column private String name; public User(String name) { this.name = name; } }
- UserRepository.java
package org.blog.test.user.repository; import org.blog.test.user.entity.User; import org.springframework.data.jpa.repository.JpaRepository; public interface UserRepository extends JpaRepository{ User findByName(String name); }
- UserService.java
package org.blog.test.user.service; package org.blog.test.user.service; import org.blog.test.user.entity.User; public interface UserService { User addUser(String name); User getUser(String name); User getUserFromSlave(String name); }
- UserServiceImpl.java
package org.blog.test.user.service.impl;
import org.blog.test.user.entity.User;
import org.blog.test.user.repository.UserRepository;
import org.blog.test.user.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.annotation.ReadOnlyProperty;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
@Transactional
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
@Override
public User addUser(String name) {
return userRepository.save(new User(name));
}
@Override
public User getUser(String name) {
return userRepository.findByName(name);
}
@Override
@Transactional(readOnly = true)
public User getUserFromSlave(String name) {
return userRepository.findByName(name);
}
}
- build.gradle
apply plugin: 'java' apply plugin: 'spring-boot' buildscript { repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:1.4.0.RELEASE") } } repositories { mavenCentral() } dependencies { compile group: 'org.springframework.boot', name: 'spring-boot-starter-actuator' compile group: 'org.springframework.boot', name: 'spring-boot-starter-web' compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa' compile group: 'org.projectlombok', name: 'lombok', version: '1.16.10' compile group: 'mysql', name: 'mysql-connector-java', version: '6.0.5' compile group: 'com.googlecode.log4jdbc', name: 'log4jdbc', version: '1.2' }
- result
2016-11-27 22:18:01.846 INFO 10884 --- [ main] jdbc.sqltiming : select user0_.id as id1_0_, user0_.name as name2_0_ from user user0_ where user0_.name='name1' {executed in 21 msec} 2016-11-27 22:18:01.857 INFO 10884 --- [ main] org.blog.test.JpaApplication : master : null 2016-11-27 22:18:01.872 INFO 10884 --- [ main] jdbc.sqltiming : select user0_.id as id1_0_, user0_.name as name2_0_ from user user0_ where user0_.name='name1' {executed in 8 msec} 2016-11-27 22:18:01.899 INFO 10884 --- [ main] org.blog.test.JpaApplication : slave : User(id=1, name=name1) 2016-11-27 22:18:01.901 INFO 10884 --- [ main] org.blog.test.JpaApplication : Started JpaApplication in 10.216 seconds (JVM running for 10.937)
댓글 없음 :
댓글 쓰기