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.

  1. 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")
    }
    
  1. 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);
        }
    }
    
  1. 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);
    }
    
  2. 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
    
  3. 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 come BasicDataSource disponibili. Fare riferimento qui per maggiori dettagli
  1. 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("");
         };
     }
    

    }

  2. 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']


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow