Java SE + Spring Data + Hibernate

我正在尝试使用Spring Data + Hibernate启动Java SE应用程序,并且到目前为止已经完成了以下工作:

配置文件

@Configuration

@PropertySource("classpath:hibernate.properties")

@EnableJpaRepositories

@EnableTransactionManagement

public class JpaConfiguration {

private static final String PROPERTY_NAME_DATABASE_DRIVER = "db.driver";

private static final String PROPERTY_NAME_DATABASE_PASSWORD = "db.password";

private static final String PROPERTY_NAME_DATABASE_URL = "db.url";

private static final String PROPERTY_NAME_DATABASE_USERNAME = "db.username";

private static final String PROPERTY_NAME_HIBERNATE_DIALECT = "hibernate.dialect";

private static final String PROPERTY_NAME_HIBERNATE_SHOW_SQL = "hibernate.show_sql";

private static final String PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN =

"entitymanager.packages.to.scan";

@Resource

private Environment env;

@Bean

public DataSource dataSource() {

DriverManagerDataSource dataSource = new DriverManagerDataSource();

dataSource.setDriverClassName(

env.getRequiredProperty(PROPERTY_NAME_DATABASE_DRIVER));

dataSource.setUrl(env.getRequiredProperty(PROPERTY_NAME_DATABASE_URL));

dataSource.setUsername(env.getRequiredProperty(PROPERTY_NAME_DATABASE_USERNAME));

dataSource.setPassword(env.getRequiredProperty(PROPERTY_NAME_DATABASE_PASSWORD));

return dataSource;

}

@Bean

public LocalContainerEntityManagerFactoryBean entityManagerFactory() {

LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new

LocalContainerEntityManagerFactoryBean();

entityManagerFactoryBean.setDataSource(dataSource());

entityManagerFactoryBean.setPersistenceProviderClass(org.hibernate

.jpa.HibernatePersistenceProvider.class);

entityManagerFactoryBean.setPackagesToScan(env.

getRequiredProperty(PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN));

entityManagerFactoryBean.setJpaProperties(hibProperties());

return entityManagerFactoryBean;

}

private Properties hibProperties() {

Properties properties = new Properties();

properties.put(PROPERTY_NAME_HIBERNATE_DIALECT,

env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_DIALECT));

properties.put(PROPERTY_NAME_HIBERNATE_SHOW_SQL,

env.getRequiredProperty(PROPERTY_NAME_HIBERNATE_SHOW_SQL));

return properties;

}

@Bean

public JpaTransactionManager transactionManager() {

JpaTransactionManager transactionManager = new JpaTransactionManager();

transactionManager.setEntityManagerFactory(entityManagerFactory().getObject());

return transactionManager;

}

@Bean

public MainBean mainBean() {

return new MainBean();

}

}

Start class

public class Start {

private static final String CONFIG_PACKAGE = "org.app.config";

public static void main(String[] args) {

try (AnnotationConfigApplicationContext ctx = new

AnnotationConfigApplicationContext()) {

ctx.scan(CONFIG_PACKAGE);

ctx.refresh();

MainBean bean = ctx.getBean(MainBean.class);

bean.start();

}

}

}

Main Bean

public class MainBean {

public void start() {

System.out.println("Application Started. . .");

}

}

但是我收到以下异常

Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [C:\MyPath\target\classes\org\app\config\JpaConfiguration.class]; nested exception is java.lang.IllegalArgumentException

at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:281)

at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:242)

at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.scan(ClassPathBeanDefinitionScanner.java:220)

at org.springframework.context.annotation.AnnotationConfigApplicationContext.scan(AnnotationConfigApplicationContext.java:153)

at org.app.Start.main(Start.java:25)

Caused by: java.lang.IllegalArgumentException

at org.springframework.asm.ClassReader.<init>(Unknown Source)

at org.springframework.asm.ClassReader.<init>(Unknown Source)

at org.springframework.asm.ClassReader.<init>(Unknown Source)

at org.springframework.core.type.classreading.SimpleMetadataReader.<init>(SimpleMetadataReader.java:52)

at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:80)

at org.springframework.core.type.classreading.CachingMetadataReaderFactory.getMetadataReader(CachingMetadataReaderFactory.java:101)

at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:257)

... 4 more

有人知道我在做什么错吗?

回答:

你看到的异常不是由无效的Spring配置引起的,而是由你的类路径设置引起的。感觉就像关于ASM库和Java 8的版本不兼容。已知Spring 3.2依赖的ASM版本与Java 8不兼容。

因此,如果要使用Java 8运行代码,则需要使用最新的Spring 4.0版本。

以上是 Java SE + Spring Data + Hibernate 的全部内容, 来源链接: utcz.com/qa/408431.html

回到顶部