spring-boot
Collegamento di un'applicazione Spring-Boot a MySQL
Ricerca…
introduzione
Sappiamo che l'avvio a molla di default funziona usando il database H2. In questo articolo vedremo come modificare la configurazione predefinita per lavorare con il database MySQL.
Osservazioni
Come prerequisito, assicurati che MySQL sia già in esecuzione sulla porta 3306 e che il tuo database sia stato creato.
Esempio di avvio di primavera con MySQL
Seguiremo la guida ufficiale per spring-boot e spring-data-jpa . Creeremo l'applicazione utilizzando Gradle.
Crea il file di build 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") }
Crea l'entità cliente
src / main / java / ciao / 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); } }
Crea repository
src / main / java / ciao / CustomerRepository.java
import java.util.List; import org.springframework.data.repository.CrudRepository; public interface CustomerRepository extends CrudRepository<Customer, Long> { List<Customer> findByLastName(String lastName); }
Creare il file 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
Creare il file PersistenceConfig.java
Nel passaggio 5, definiremo come verrà caricata l'origine dati e come la nostra applicazione si connetterà a MySQL. Il frammento di cui sopra è la configurazione minima indispensabile che dobbiamo connettere a MySQL. Qui forniamo due fagioli:
@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 Questo ci dà un handle sulle configurazioni EntityManagerFactory e ci permette di fare personalizzazioni. Ci consente inoltre di iniettare PersistenceContext nei nostri componenti come di seguito:
@PersistenceContext
private EntityManager em;
- DataSource Qui restituiamo un'istanza di
DriverManagerDataSource
. È una semplice implementazione dell'interfaccia standard JDBC DataSource, che configura un semplice vecchio driver JDBC tramite le proprietà bean e restituisce una nuova connessione per ogni chiamata getConnection. Si noti che raccomando di usarlo rigorosamente a scopo di test poiché ci sono alternative migliori comeBasicDataSource
disponibili. Fare riferimento qui per maggiori dettagli
Crea una classe di applicazione
src / main / java / ciao / 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(""); }; }
}
Esecuzione dell'applicazione
Se stai utilizzando un IDE come STS , puoi semplicemente fare clic con il pulsante destro del mouse sul progetto -> Esegui come -> Gradle (STS) Build ... Nell'elenco delle attività, digitare bootRun ed Esegui.
Se stai usando gradle sulla riga di comando , puoi semplicemente eseguire l'applicazione come segue:
./gradlew bootRun
Dovresti vedere qualcosa di simile a questo:
== 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']