spring-boot
스프링 부트 애플리케이션을 MySQL에 연결하기
수색…
소개
기본적으로 spring-boot는 H2 데이터베이스를 사용하여 실행됩니다. 이 기사에서는 MySQL 데이터베이스에서 작동하도록 기본 구성을 조정하는 방법을 살펴 보겠습니다.
비고
선행 조건으로, MySQL이 이미 포트 3306에서 실행 중이며 데이터베이스가 생성되었는지 확인하십시오.
MySQL을 사용하는 스프링 부트 샘플
우리는 봄 부츠 및 봄 - 데이터 -JPA에 대한 공식 가이드를 따를 것입니다. 우리는 gradle을 사용하여 응용 프로그램을 빌드 할 것입니다.
gradle 빌드 파일 만들기
build.gradle
buildscript { repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:1.4.3.RELEASE") } } apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'idea' apply plugin: 'org.springframework.boot' jar { baseName = 'gs-accessing-data-jpa' version = '0.1.0' } repositories { mavenCentral() maven { url "https://repository.jboss.org/nexus/content/repositories/releases" } } sourceCompatibility = 1.8 targetCompatibility = 1.8 dependencies { compile("org.springframework.boot:spring-boot-starter-data-jpa") runtime('mysql:mysql-connector-java') testCompile("junit:junit") }
고객 엔티티 만들기
src / main / java / hello / Customer.java
@Entity public class Customer { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id; private String firstName; private String lastName; protected Customer() {} public Customer(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } @Override public String toString() { return String.format( "Customer[id=%d, firstName='%s', lastName='%s']", id, firstName, lastName); } }
리포지토리 만들기
src / main / java / hello / CustomerRepository.java
import java.util.List; import org.springframework.data.repository.CrudRepository; public interface CustomerRepository extends CrudRepository<Customer, Long> { List<Customer> findByLastName(String lastName); }
application.properties 파일 만들기
################### DataSource Configuration ########################## jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/your_database_name jdbc.username=username jdbc.password=password init-db=false ################### Hibernate Configuration ########################## hibernate.dialect=org.hibernate.dialect.MySQLDialect hibernate.show_sql=true hibernate.hbm2ddl.auto=update
PersistenceConfig.java 파일을 만든다.
5 단계에서 우리는 데이터 소스가 어떻게 로딩 될지와 우리의 어플리케이션이 MySQL에 어떻게 연결되는지를 정의 할 것입니다. 위의 스 니펫은 MySQL에 연결하는 데 필요한 최소한의 구성입니다. 여기서 우리는 두 가지 빈을 제공합니다.
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages="hello")
public class PersistenceConfig
{
@Autowired
private Environment env;
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory()
{
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
vendorAdapter.setGenerateDdl(Boolean.TRUE);
vendorAdapter.setShowSql(Boolean.TRUE);
factory.setDataSource(dataSource());
factory.setJpaVendorAdapter(vendorAdapter);
factory.setPackagesToScan("hello");
Properties jpaProperties = new Properties();
jpaProperties.put("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
factory.setJpaProperties(jpaProperties);
factory.afterPropertiesSet();
factory.setLoadTimeWeaver(new InstrumentationLoadTimeWeaver());
return factory;
}
@Bean
public DataSource dataSource()
{
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(env.getProperty("jdbc.driverClassName"));
dataSource.setUrl(env.getProperty("jdbc.url"));
dataSource.setUsername(env.getProperty("jdbc.username"));
dataSource.setPassword(env.getProperty("jdbc.password"));
return dataSource;
}
}
- LocalContainerEntityManagerFactoryBean 이것은 우리에게 EntityManagerFactory 설정에 대한 핸들을 제공하고 우리가 커스터마이징을 할 수있게 해줍니다. 또한 아래와 같이 PersistenceContext를 컴포넌트에 삽입 할 수 있습니다.
@PersistenceContext
private EntityManager em;
- DataSource 여기서 우리는
DriverManagerDataSource
의 인스턴스를 리턴한다. 이것은 표준 JDBC DataSource 인터페이스의 간단한 구현이며 bean 속성을 통해 일반 오래된 JDBC 드라이버를 구성하고 모든 getConnection 호출에 대해 새 Connection을 리턴합니다.BasicDataSource
와 같은 더 나은 대안이 있으므로 테스트 용도로 엄격하게 사용하는 것이 좋습니다. 자세한 내용은 여기 를 참조하십시오.
응용 프로그램 클래스 만들기
src / main / java / hello / Application.java
@SpringBootApplication public class Application { private static final Logger log = LoggerFactory.getLogger(Application.class); @Autowired private CustomerRepository repository; public static void main(String[] args) { SpringApplication.run(TestCoreApplication.class, args); } @Bean public CommandLineRunner demo() { return (args) -> { // save a couple of customers repository.save(new Customer("Jack", "Bauer")); repository.save(new Customer("Chloe", "O'Brian")); repository.save(new Customer("Kim", "Bauer")); repository.save(new Customer("David", "Palmer")); repository.save(new Customer("Michelle", "Dessler")); // fetch all customers log.info("Customers found with findAll():"); log.info("-------------------------------"); for (Customer customer : repository.findAll()) { log.info(customer.toString()); } log.info(""); // fetch an individual customer by ID Customer customer = repository.findOne(1L); log.info("Customer found with findOne(1L):"); log.info("--------------------------------"); log.info(customer.toString()); log.info(""); // fetch customers by last name log.info("Customer found with findByLastName('Bauer'):"); log.info("--------------------------------------------"); for (Customer bauer : repository.findByLastName("Bauer")) { log.info(bauer.toString()); } log.info(""); }; }
}
응용 프로그램 실행
STS와 같은 IDE를 사용하는 경우 프로젝트를 마우스 오른쪽 버튼으로 클릭 -> Run As -> Gradle (STS) Build ... 작업 목록에서 bootRun 및 Run을 입력하십시오.
명령 줄 에서 gradle을 사용하는 경우 다음과 같이 응용 프로그램을 간단하게 실행할 수 있습니다.
./gradlew bootRun
다음과 같은 내용을보아야합니다.
== Customers found with findAll():
Customer[id=1, firstName='Jack', lastName='Bauer']
Customer[id=2, firstName='Chloe', lastName='O'Brian']
Customer[id=3, firstName='Kim', lastName='Bauer']
Customer[id=4, firstName='David', lastName='Palmer']
Customer[id=5, firstName='Michelle', lastName='Dessler']
== Customer found with findOne(1L):
Customer[id=1, firstName='Jack', lastName='Bauer']
== Customer found with findByLastName('Bauer'):
Customer[id=1, firstName='Jack', lastName='Bauer']
Customer[id=3, firstName='Kim', lastName='Bauer']