Как настроить JPA весной MVC? - PullRequest
       6

Как настроить JPA весной MVC?

0 голосов
/ 26 сентября 2018

Я пытаюсь реализовать jpa в своем приложении с помощью учебника из

dev-calibry

Итак, мой DataConfig выглядит так:

import org.hibernate.ejb.HibernatePersistence;
import org.hibernate.jpa.HibernatePersistenceProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.annotation.Resource;
import javax.sql.DataSource;
import java.util.Properties;

@Configuration
@EnableTransactionManagement
@ComponentScan("ru.sbrf.risks.services.data")
@PropertySource("classpath:app.properties")
@EnableJpaRepositories("ru.sbrf.risks.services.data.persistence")
public class DataConfig {
    private static final String PROP_DATABASE_DRIVER = "db.driver";
    private static final String PROP_DATABASE_URL = "db.url";
    private static final String PROP_DATABASE_USERNAME = "db.username";
    private static final String PROP_HIBERNATE_DIALECT = "db.hibernate.dialect";
    private static final String PROP_HIBERNATE_SHOW_SQL = "db.hibernate.show_sql";
    private static final String PROP_ENTITYMANAGER_PACKAGES_TO_SCAN = "db.entitymanager.packages.to.scan";
    private static final String PROP_HIBERNATE_HBM2DDL_AUTO = "db.hibernate.hbm2ddl.auto";

    @Resource
    private Environment env;

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();

        dataSource.setDriverClassName(env.getRequiredProperty(PROP_DATABASE_DRIVER));
        dataSource.setUrl(env.getRequiredProperty(PROP_DATABASE_URL));
        dataSource.setUsername(env.getRequiredProperty(PROP_DATABASE_USERNAME));
        dataSource.setPassword(env.getRequiredProperty("db.password"));

        return dataSource;
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
        LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
        entityManagerFactoryBean.setDataSource(dataSource());
        entityManagerFactoryBean.setPersistenceProviderClass(HibernatePersistence.class);
        entityManagerFactoryBean.setPackagesToScan(env.getRequiredProperty(PROP_ENTITYMANAGER_PACKAGES_TO_SCAN));

        entityManagerFactoryBean.setJpaProperties(getHibernateProperties());

        return entityManagerFactoryBean;
    }

    @Bean
    public JpaTransactionManager transactionManager() {
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(entityManagerFactory().getObject());

        return transactionManager;
    }

    private Properties getHibernateProperties() {
        Properties properties = new Properties();
        properties.put(PROP_HIBERNATE_DIALECT, env.getRequiredProperty(PROP_HIBERNATE_DIALECT));
        properties.put(PROP_HIBERNATE_SHOW_SQL, env.getRequiredProperty(PROP_HIBERNATE_SHOW_SQL));
        properties.put(PROP_HIBERNATE_HBM2DDL_AUTO, env.getRequiredProperty(PROP_HIBERNATE_HBM2DDL_AUTO));

        return properties;
    }
}

Но при попытке запустить приложение появляется сообщение об ошибке.Build war-> start on embeded tomcat.

Соединено с сервером [2018-09-26 09: 54: 32,631] Артефакт без имени: Артефакт развертывается, пожалуйста, подождите ... 26-Sep-2018 09: 54: 34.460 ПРЕДУПРЕЖДЕНИЕ [Соединение RMI TCP (3) -127.0.0.1] org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory.getObjectInstance Name = LanitBPM Свойство maxActive не используется в DBCP2, вместо этого используйте maxTotal.Значение по умолчанию maxTotal равно 8. Вы установили значение «3» для свойства «maxActive», которое игнорируется.26-Sep-2018 09: 54: 34.587 ИНФОРМАЦИЯ [Соединение RMI TCP (3) -127.0.0.1] org.apache.jasper.servlet.TldScanner.scanJars По крайней мере один JAR был проверен на предмет TLD, но не содержал TLD.Включите ведение журнала отладки для этого регистратора, чтобы получить полный список JAR-файлов, которые были отсканированы, но в них не обнаружены TLD.Пропуск ненужных файлов JAR во время сканирования может улучшить время запуска и время компиляции JSP.26-Sep-2018 09: 54: 34.814 ИНФОРМАЦИЯ [Соединение RMI TCP (3) -127.0.0.1] org.springframework.web.context.ContextLoader.initWebApplicationContext Root WebApplicationContext: инициализация началась 26-Sep-2018 09: 54: 34.873 INFO[Соединение RMI TCP (3) -127.0.0.1] org.springframework.web.context.support.AnnotationConfigWebApplicationContext.prepareRefresh Обновление корневого WebApplicationContext: дата запуска [ср. 26 сен. 09:54:34 MSK 2018];корень иерархии контекста 26-Sep-2018 09: 54: 35.051 INFO [Соединение RMI TCP (3) -127.0.0.1] org.springframework.web.context.support.AnnotationConfigWebApplicationContext.loadBeanDefinitions Регистрация аннотированных классов: [класс ru.sbrf.risk.services.data.service.config.ServiceConfig, класс ru.sbrf.risks.services.data.persistence.config.DataConfig, класс ru.sbrf.risks.services.data.web.config.WebConfig] 26 сентября2018 09: 54: 35.583 ПРЕДУПРЕЖДЕНИЕ [Соединение RMI TCP (3) -127.0.0.1] org.springframework.web.context.support.AnnotationConfigWebApplicationContext.refresh Исключительная ситуация, возникшая при инициализации контекста - отмена попытки обновления: org.springframework.beans.factory.BeanDefinitionStoreException: не удалось проанализировать класс конфигурации [ru.sbrf.risks.services.data.persistence.config.DataConfig];вложенное исключение - java.lang.IllegalStateException: не удалось проанализировать аннотированные методы в классе ru.sbrf.risks.services.data.persistence.config.DataConfig 26-Sep-2018 09: 54: 35.596 SEVERE [RMI TCP-соединение (3) -127.0.0.1] org.springframework.web.context.ContextLoader.initWebApplicationContext Сбой инициализации контекста org.springframework.beans.factory.BeanDefinitionStoreException: Не удалось разобрать класс конфигурации [ru.sbrf.risks.services.data.persataConff;вложенным исключением является java.lang.IllegalStateException: не удалось проанализировать аннотированные методы в классе ru.sbrf.risks.services.data.persistence.config.DataConfig в org.springframework.context.annotation.ConfigurationClassParser.parse (ConfigurationClassParser) (ConfigurationClassParser).... Вызвано: java.lang.IllegalStateException: не удалось проанализировать аннотированные методы в классе ru.sbrf.risks.services.data.persistence.config.DataConfig в org.springframework.core.type.StandardAnnotationMetadata.getAnnotaava.noj ().: 163) в org.springframework.context.annotation.ConfigurationClassParser.retrieveBeanMethodMetadata (ConfigurationClassParser.java:380) в org.springframework.context.annotation.ConfigurationClassParser.dolasscessjlass.ar4Par4org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass (ConfigurationClassParser.java:245) в org.springframework.context.annotation.ConfigurationClassParser.parse (ConfigurationClassParser.java:19lass.arf.conf.serf.conf.serf.conf.serf.conf.serf.serf.ConfigurationClassParser.java:167) ... еще 54 [2018-09-26 09: 54: 35,640] Неизвестный артефакт: ошибка при развертывании артефакта.Смотрите журнал сервера для деталей.Вызывается: java.lang.NoClassDefFoundError: org / springframework / orm / jpa / JpaTransactionManager в java.lang.Class.getDeclaredMethods0 (нативный метод) в java.lang.Class.privateGetDeclaredMethods:01. Java. JavaClass.getDeclaredMethods (Class.java:1975) в org.springframework.core.type.StandardAnnotationMetadata.getAnnotatedMethods (StandardAnnotationMetadata.java:152) ... еще 59 причин, вызванных: java.lang.Cessf.workrag.prog.prog.prog.prog.JpaTransactionManager at org.apache.catalina.loader.WebappClassLoaderBase.loadClass (WebappClassLoaderBase.java:1291) в org.apache.catalina.loader.WebappClassLoaderBase.loadClass (WebappClassLoaderBase.jpg 1011115* 26-Sep-2018 09: 54: 35.602 SEVERE [RMI TCP-соединение (3) -127.0.0.1] org.apache.catalina.core.StandardContext.startInternal Не удалось запустить один или несколько прослушивателей.Полная информация будет найдена в соответствующем файле журнала контейнера. 26-Sep-2018 09: 54: 35.603 SEVERE [Соединение RMI TCP (3) -127.0.0.1] org.apache.catalina.core.StandardContext.startInternal Context [] сбой при запуске []из-за предыдущих ошибок 26-Sep-2018 09: 54: 42.439 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Развертывание каталога веб-приложения [C: \ java \ apache-tomcat-8.5.29\ webapps \ manager] 26-сен-2018 09: 54: 42.629 ИНФОРМАЦИЯ [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Развертывание каталога веб-приложения [C: \ java \ apache-tomcat-8.5.29 \ webapps \ manager] закончил за [189] мс

Если есть лучший способ использовать jpa с spring-mvc?(без пружинной загрузки)

app.properties:

#DB properties: 
db.driver=com.mysql.jdbc.Driver 
db.url=jdbc:mysql://localhost:3306/mydb 
db.username=root 
db.password=111111

#Hibernate Configuration:    
db.hibernate.dialect=org.hibernate.dialect.MySQLDialect   
db.hibernate.show_sql=true    
db.entitymanager.packages.to.scan=ru.sbrf.risks.services.data
db.hibernate.hbm2ddl.auto = create

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>MyApp</groupId>
    <artifactId>MyApp</artifactId>
    <version>1.0</version>
    <packaging>war</packaging>

    <properties>
        <java.version>1.8</java.version>
        <spring.version>4.3.9.RELEASE</spring.version>
        <spring.data>2.1.0.RELEASE</spring.data>
        <swagger.version>2.7.0</swagger.version>
        <hibernate.version>5.3.6.Final</hibernate.version>
    </properties>

    <dependencies>
        <!--SPRING-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- Servlet-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>
        <!-- SWAGGER-->
        <!--<dependency>-->
            <!--<groupId>io.springfox</groupId>-->
            <!--<artifactId>springfox-swagger2</artifactId>-->
            <!--<version>${swagger.version}</version>-->
        <!--</dependency>-->
        <!--<dependency>-->
            <!--<groupId>io.springfox</groupId>-->
            <!--<artifactId>springfox-swagger-ui</artifactId>-->
            <!--<version>${swagger.version}</version>-->
        <!--</dependency>-->
        <!--DATA BASE-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>6.0.6</version>
            <scope>runtime</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-jpa -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>${spring.data}</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>4.3.8.Final</version>
        </dependency>
        <!--<dependency>-->
            <!--<groupId>com.fasterxml.jackson.dataformat</groupId>-->
            <!--<artifactId>jackson-dataformat-xml</artifactId>-->
            <!--<version>2.9.6</version>-->
        <!--</dependency>-->
    </dependencies>
    <build>
        <finalName>MyApp</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

1 Ответ

0 голосов
/ 26 сентября 2018

Компонент DataSource - OK

PlatformTransactionManager / JpaTransactionManager - не завершено :

@Bean
public JpaTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
    JpaTransactionManager transactionManager = new JpaTransactionManager();
    transactionManager.setEntityManagerFactory(entityManagerFactory);
    return transactionManager;
}

LocalContainerEntityManagerFactoryBean - не завершено

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
    LocalContainerEntityManagerFactoryBean entityManager = new LocalContainerEntityManagerFactoryBean();
    entityManager.setDataSource(dataSource());
    entityManager.setPackagesToScan("some package(s)");
    entityManager.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
    entityManager.setJpaProperties(hibernateProperties);
    return entityManager;
}

И я не использую аннотации следующего класса:
@ComponentScan(" ... ") //you use scan in entityManagerFactory
@PropertySource(" ... ") //you use env.getProperty
@EnableJpaRepositories(" ... ")

Я использую следующие пакеты, касающиеся Jpa/ Hibernate:

compile group: 'org.springframework', name: 'spring-webmvc', version: SPRING_VERSION
compile group: 'org.springframework.data', name: 'spring-data-jpa', version: SPRING_DATA_VERSION
compile group: 'org.springframework', name: 'spring-orm', version: SPRING_VERSION

compile group: 'mysql', name: 'mysql-connector-java', version: MYSQL_CONNECTOR_VERSION

compile group: 'org.hibernate', name: 'hibernate-core', version: HIBERNATE_VERSION
compile group: 'org.hibernate', name: 'hibernate-entitymanager', version: HIBERNATE_VERSION
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...