问题描述
我使用 Spring boot+JPA 并且在启动服务时遇到问题.
I use Spring boot+JPA and having a problem while starting the service.
Caused by: java.lang.IllegalArgumentException: Not an managed type: class com.nervytech.dialer.domain.PhoneSettings
at org.hibernate.jpa.internal.metamodel.MetamodelImpl.managedType(MetamodelImpl.java:219)
at org.springframework.data.jpa.repository.support.JpaMetamodelEntityInformation.<init>(JpaMetamodelEntityInformation.java:68)
at org.springframework.data.jpa.repository.support.JpaEntityInformationSupport.getMetadata(JpaEntityInformationSupport.java:65)
at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getEntityInformation(JpaRepositoryFactory.java:145)
at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:89)
at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:69)
at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:177)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:239)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:225)
at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:92)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1625)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1562)
这是Application.java文件,
Here is the Application.java file,
@Configuration
@ComponentScan
@EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class })
@SpringBootApplication
public class DialerApplication {
public static void main(String[] args) {
SpringApplication.run(DialerApplication.class, args);
}
}
我使用 UCp 进行连接池,数据源配置如下,
I use UCp for connection pooling and the DataSource configuration is below,
@Configuration
@ComponentScan
@EnableTransactionManagement
@EnableAutoConfiguration
@EnableJpaRepositories(entityManagerFactoryRef = "dialerEntityManagerFactory", transactionManagerRef = "dialerTransactionManager", basePackages = { "com.nervy.dialer.spring.jpa.repository" })
public class ApplicationDataSource {
/** The Constant LOGGER. */
private static final Logger LOGGER = LoggerFactory
.getLogger(ApplicationDataSource.class);
/** The Constant TEST_SQL. */
private static final String TEST_SQL = "select 1 from dual";
/** The pooled data source. */
private PoolDataSource pooledDataSource;
UserDetailsService 实现,
UserDetailsService Implementation,
@Service("userDetailsService")
@SessionAttributes("user")
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
private UserService userService;
服务层实现,
@Service
public class PhoneSettingsServiceImpl implements PhoneSettingsService {
}
存储库类,
@Repository
public interface PhoneSettingsRepository extends JpaRepository<PhoneSettings, Long> {
}
实体类,
@Entity
@Table(name = "phone_settings", catalog = "dialer")
public class PhoneSettings implements java.io.Serializable {
WebSecurityConfig 类,
WebSecurityConfig class,
@Configuration
@EnableWebMvcSecurity
@ComponentScan
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsServiceImpl userDetailsService;
/**
* Instantiates a new web security config.
*/
public WebSecurityConfig() {
super();
}
/**
* {@inheritDoc}
* @see org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter#configure(org.springframework.security.config.annotation.web.builders.HttpSecurity)
*/
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/login", "/logoffUser", "/sessionExpired", "/error", "/unauth", "/redirect", "*support*").permitAll()
.anyRequest().authenticated().and().rememberMe().and().httpBasic()
.and()
.csrf()
.disable().logout().deleteCookies("JSESSIONID").logoutSuccessUrl("/logoff").invalidateHttpSession(true);
}
@Autowired
public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(new BCryptPasswordEncoder());
}
}
包如下,
Application
类在 -com.nervy.dialer
Datasource
类在 -com.nervy.dialer.common
- 实体类位于 -
com.nervy.dialer.domain
- 服务类在 -
com.nervy.dialer.domain.service.impl
- 控制器在 -
com.nervy.dialer.spring.controller
- 存储库类位于 -
com.nervy.dialer.spring.jpa.repository
WebSecurityConfig
在 -com.nervy.dialer.spring.security
Application
class is in -com.nervy.dialer
Datasource
class is in -com.nervy.dialer.common
- Entity classes are in -
com.nervy.dialer.domain
- Service classes are in -
com.nervy.dialer.domain.service.impl
- Controllers are in -
com.nervy.dialer.spring.controller
- Repository classes are in -
com.nervy.dialer.spring.jpa.repository
WebSecurityConfig
is in -com.nervy.dialer.spring.security
谢谢
推荐答案
我想用 @ComponentScan("com.nervy.dialer.domain")
替换 @ComponentScan
会工作.
I think replacing @ComponentScan
with @ComponentScan("com.nervy.dialer.domain")
will work.
我添加了一个示例应用程序来演示如何设置池化数据源连接与 BoneCP.
I have added a sample application to demonstrate how to set up a pooled datasource connection with BoneCP.
该应用程序的结构与您的相同.我希望这能帮助您解决配置问题
The application has the same structure with yours. I hope this will help you to resolve your configuration problems
这篇关于Spring boot - 不是托管类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!