我现在尝试使用弹簧数据设置一个简单的gradle项目。 这是我的配置文件:
Gradle dependentdencied file:
repositories {
mavenCentral()
}
dependencies {
//compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
compile group: 'javax.servlet', name:'servlet-api', version:'2.5'
compile group: 'org.springframework', name:'spring-beans', version:'3.1.1.RELEASE'
compile group: 'org.springframework', name:'spring-context', version:'3.1.1.RELEASE'
compile group: 'org.springframework', name:'spring-core', version:'3.1.1.RELEASE'
compile group: 'org.springframework', name:'spring-expression', version:'3.1.1.RELEASE'
compile group: 'org.springframework', name:'spring-web', version:'3.1.1.RELEASE'
/*compile group: 'org.springframework', name:'spring', version:'3.2.0.RELEASE'*/
compile group: 'org.springframework.security', name:'spring-security-core', version:'3.1.1.RELEASE'
compile group: 'cglib', name:'cglib', version:'2.2'
compile group: 'commons-logging', name: 'commons-logging', version:'1.1.1'
compile group: 'org.springframework.data', name: 'spring-data-jpa', version:'1.4.1.RELEASE'
compile group: 'commons-dbcp', name: 'commons-dbcp', version:'1.4'
compile group: 'org.springframework', name: 'spring-orm', version:'3.1.1.RELEASE'
compile group: 'org.springframework', name: 'spring-jdbc', version:'3.1.1.RELEASE'
compile group: 'mysql', name: 'mysql-connector-java', version:'5.1.6'
compile group: 'org.hibernate', name: 'hibernate-c3p0', version:'4.2.1.Final'
compile group: 'org.hibernate', name: 'hibernate-entitymanager', version:'4.2.1.Final'
compile group: 'commons-io', name: 'commons-io', version:'1.3.2'
testCompile group: 'junit', name: 'junit', version: '4.+'
}
应用context.xml中:
<context:annotation-config />
<!-- Add this tag to enable annotations transactions -->
<tx:annotation-driven transaction-manager="transactionManager"
proxy-target-class="true" />
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="punit"/>
<property name="dataSource" ref="dataSource"/>
<property name="jpaDialect">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
</property>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="database" value="MYSQL"/>
<!-- <property name="databasePlatform" value="${hibernate.dialect}"/> -->
<property name="showSql" value="false"/>
<property name="generateDdl" value="false"/>
<!-- <property name="hibernate.connection.autocommit" value="false"/> -->
</bean>
</property>
<property name="jpaPropertyMap">
<map>
<entry key="hibernate.connection.autocommit" value="false" />
</map>
</property>
</bean>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql://localhost:33306/db" />
<property name="user" value="root" />
<property name="password" value="pass" />
<property name="acquireIncrement" value="5" />
<property name="minPoolSize" value="2" />
<property name="maxPoolSize" value="5" />
<property name="maxIdleTime" value="1800" />
</bean>
<context:component-scan base-package="com"/>
<jpa:repositories base-package="com" />
我的项目的其余部分是一个简单的存储库,服务和控制器。
当我执行tomcat时,我收到以下错误:
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: URL [jar:file:/D:/workspaceNG/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/spring-mvc-simple-master/WEB-INF/lib/mysql-connector-java-5.1.6.jar!/com/mysql/jdbc/integration/jboss/ExtendedMysqlExceptionSorter.class]; nested exception is java.io.FileNotFoundException: class path resource [org/jboss/resource/adapter/jdbc/vendor/MySQLExceptionSorter.class] cannot be opened because it does not exist
at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:281)
at org.springframework.data.repository.config.RepositoryConfigurationSourceSupport.getCandidates(RepositoryConfigurationSourceSupport.java:68)
at org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport.getRepositoryConfigurations(RepositoryConfigurationExtensionSupport.java:53)
at org.springframework.data.repository.config.RepositoryBeanDefinitionParser.parse(RepositoryBeanDefinitionParser.java:69)
... 30 more
Caused by: java.io.FileNotFoundException: class path resource [org/jboss/resource/adapter/jdbc/vendor/MySQLExceptionSorter.class] cannot be opened because it does not exist
at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:157)
at org.springframework.core.type.classreading.SimpleMetadataReader.<init>(SimpleMetadataReader.java:50)
at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:80)
at org.springframework.core.type.classreading.CachingMetadataReaderFactory.getMetadataReader(CachingMetadataReaderFactory.java:102)
at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:76)
at org.springframework.core.type.filter.AbstractTypeHierarchyTraversingFilter.match(AbstractTypeHierarchyTraversingFilter.java:105)
at org.springframework.core.type.filter.AbstractTypeHierarchyTraversingFilter.match(AbstractTypeHierarchyTraversingFilter.java:76)
at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.isCandidateComponent(ClassPathScanningCandidateComponentProvider.java:324)
at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:258)
... 33 more
任何想法是什么?为什么jboss与我的项目有关?
答案 0 :(得分:2)
<context:component-scan base-package="com"/>
问题是你是com
包上的组件扫描,所以基本上你正在扫描所有类。为了使这个扫描工作,需要加载所有类,并且当一个类被加载到类加载器中时,它的引用类也是如此。
在这种情况下,加载了类ExtendedMysqlExceptionSorter
(由于您的com
组件扫描),它需要来自JBoss的MySQLExceptionSorter
。基本上没有加载课程将解决你的问题。
解决方案不是扫描所有内容,只扫描自己的包。这也将使您的应用程序启动更快。
关于您的配置的其他一些评论
<context:annotation-config />
已经隐含<context:component-scan />
。
hibernate.connection.*
属性无法执行任何操作,因为您正在注入DataSource
。 jpaDialect
已由JpaVendorAdapter
设置。 删除它会清理您的配置。