2017-03-07 1 views
-1

스프링 데이터 나머지를 사용하려고합니다. 나는 pom에 의존성을 포함 시켰고 빈을 정의했지만 리포지토리에 대한 매핑은 생성되지 않았다. 어디에서 문제를 찾기 시작 했습니까?스프링 데이터 나머지 매핑되지 않음

@Bean 
    public RepositoryRestConfigurer repositoryRestConfigurer(){ 

     return new RepositoryRestConfigurerAdapter(){ 

      @Override 
      public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config){ 
       config.setBasePath("/api"); 
      } 
     }; 
    } 

다음 AppConfig.java

package com.pdma.dmapp.configuration; 
@Configuration 
@EnableWebMvc 
@ComponentScan(basePackages = "com.pdma.dmapp") 
public class AppConfig extends WebMvcConfigurerAdapter{ 

    @Bean(name="multipartResolver") 
    public StandardServletMultipartResolver resolver(){ 
     return new StandardServletMultipartResolver(); 
    } 

    @Override 
    public void configureViewResolvers(ViewResolverRegistry registry){ 
     InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); 
     viewResolver.setViewClass(JstlView.class); 
     viewResolver.setPrefix("/WEB-INF/views/"); 
     viewResolver.setSuffix(".jsp"); 
     registry.viewResolver(viewResolver); 
    } 

    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry){ 
     registry.addResourceHandler("/webResources/**").addResourceLocations("/webResources/"); 
     registry.addResourceHandler("/app/**").addResourceLocations("/app/"); 
    } 
} 

PersistenceContext.java

package com.pdma.dmapp.configuration; 

@Configuration 
@EnableTransactionManagement 
@PropertySource(value = {"classpath:db.properties"}) 
@EnableJpaRepositories("com.pdma.dmapp.module") 
public class PersistenceContext { 

    @Autowired 
    private Environment environment; 


    @Bean 
    @Autowired 
    public LocalSessionFactoryBean sessionFactory(){ 

     LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); 
     sessionFactory.setDataSource(dataSource()); 
     sessionFactory.setPackagesToScan(new String [] {"com.pdma.dmapp.module"}); 
     sessionFactory.setHibernateProperties(hibernateProperties()); 
     return sessionFactory; 
    } 

    @Bean 
    @Autowired 
    LocalContainerEntityManagerFactoryBean entityManagerFactory(
      DataSource dataSource, 
      Environment env){ 

     LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = 
       new LocalContainerEntityManagerFactoryBean(); 

     entityManagerFactoryBean.setDataSource(dataSource); 
     entityManagerFactoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter()); 
     entityManagerFactoryBean.setPackagesToScan(new String [] {"com.pdma.dmapp.module"}); 

     entityManagerFactoryBean.setJpaProperties(hibernateProperties()); 

     return entityManagerFactoryBean; 

    } 

    @Bean 
    public DataSource dataSource(){ 

     DriverManagerDataSource dataSource = new DriverManagerDataSource(); 
     dataSource.setDriverClassName( environment.getRequiredProperty("jdbc.driverClassName")); 
     dataSource.setUrl(    environment.getRequiredProperty("jdbc.url")); 
     dataSource.setUsername(  environment.getRequiredProperty("jdbc.username")); 
     dataSource.setPassword(  environment.getRequiredProperty("jdbc.password")); 
     return dataSource; 
    } 

    private Properties hibernateProperties(){ 

     Properties properties = new Properties(); 
     properties.put("hibernate.dialect",  environment.getRequiredProperty("hibernate.dialect")); 
     properties.put("hibernate.show_sql", environment.getRequiredProperty("hibernate.show_sql")); 
     properties.put("hibernate.format_sql", environment.getRequiredProperty("hibernate.format_sql")); 
     return properties; 
    } 

    @Bean 
    @Autowired 
    public HibernateTransactionManager hibernateTXManager(SessionFactory sessionFactory){ 

     HibernateTransactionManager txManager = new HibernateTransactionManager(); 
     txManager.setSessionFactory(sessionFactory);  
     return txManager; 
    } 

    @Bean 
    @Autowired 
    JpaTransactionManager jpaTXManager(EntityManagerFactory entityManagerFactory){ 

     JpaTransactionManager txManager = new JpaTransactionManager(); 
     txManager.setEntityManagerFactory(entityManagerFactory); 
     return txManager; 
    } 


    /* Same Bean Created as above because CrudRepository Methods are annotated with @Transactional 
    * So they require a bean named transactionManager*/ 

    @Bean 
    @Autowired 
    JpaTransactionManager transactionManager(EntityManagerFactory entityManagerFactory){ 

     JpaTransactionManager txManager = new JpaTransactionManager(); 
     txManager.setEntityManagerFactory(entityManagerFactory); 
     return txManager; 
    } 

    @Bean 
    @Autowired 
    public RepositoryRestConfigurer repositoryRestConfigurer(){ 

     return new RepositoryRestConfigurerAdapter(){ 

      @Override 
      public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config){ 
       config.setBasePath("/api"); 
      } 
     }; 
    } 
} 

SecurityConfiguration.java

의 pom.xml

<properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <springframework.version>4.3.1.RELEASE</springframework.version> 
     <springsecurity.version>4.2.0.RELEASE</springsecurity.version> 
     <hibernate.core.version>4.3.11.Final</hibernate.core.version> 
     <hibernate.validator.version>5.1.3.Final</hibernate.validator.version> 
     <mysql.connector.version>5.1.31</mysql.connector.version> 
     <postgresql.version>9.4-1200-jdbc41</postgresql.version> 
     <joda-time.version>2.3</joda-time.version> 
     <jackson-version>2.7.5</jackson-version> 
     <maven-compiler-plugin-version>3.2</maven-compiler-plugin-version> 
     <maven-war-plugin-version>2.4</maven-war-plugin-version> 
     <source-jdk>1.8</source-jdk> 
     <target-jdk>1.8</target-jdk> 
     <war-source-directory>src/main/webapp</war-source-directory> 
     <war-name>dmapp</war-name> 
     <final-name>dmapp</final-name> 
    </properties> 

    <dependencies> 
    <!-- Spring --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>${springframework.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>${springframework.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>${springframework.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-tx</artifactId> 
     <version>${springframework.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>${springframework.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-jpa</artifactId> 
     <version>1.7.2.RELEASE</version> 
    </dependency> 
    <dependency> 
    <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-rest-webmvc</artifactId> 
     <version>2.6.1.RELEASE</version> 
    </dependency> 


    <!-- SPRING SECURITY --> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-web</artifactId> 
     <version>${springsecurity.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-config</artifactId> 
     <version>${springsecurity.version}</version> 
    </dependency> 


    <!-- Hibernate --> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>${hibernate.core.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>4.3.11.Final</version> 
    </dependency> 

    <!-- jsr303 validation --> 
    <dependency> 
     <groupId>javax.validation</groupId> 
     <artifactId>validation-api</artifactId> 
     <version>1.1.0.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator</artifactId> 
     <version>${hibernate.validator.version}</version> 
    </dependency> 



    <!-- Javax Transactions -->  
    <dependency> 
     <groupId>javax.transaction</groupId> 
     <artifactId>jta</artifactId> 
     <version>1.1</version> 
    </dependency> 




    <!-- POSTGRESQL --> 
    <dependency> 
     <groupId>org.postgresql</groupId> 
     <artifactId>postgresql</artifactId> 
     <version>${postgresql.version}</version> 
    </dependency> 

    <!-- Joda-Time -->  
    <dependency> 
     <groupId>joda-time</groupId> 
     <artifactId>joda-time</artifactId> 
     <version>${joda-time.version}</version> 
    </dependency> 

    <!-- To map JodaTime with database type -->  
    <dependency> 
     <groupId>org.jadira.usertype</groupId> 
     <artifactId>usertype.core</artifactId> 
     <version>3.0.0.CR1</version> 
    </dependency> 

    <!-- Servlet+JSP+JSTL --> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>javax.servlet-api</artifactId> 
     <version>3.1.0</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet.jsp</groupId> 
     <artifactId>javax.servlet.jsp-api</artifactId> 
     <version>2.3.1</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>jstl</artifactId> 
     <version>1.2</version> 
    </dependency> 

    <!-- <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-core</artifactId> 
     <version>${jackson-version}</version> 
    </dependency> 

    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-databind</artifactId> 
     <version>${jackson-version}</version> 
    </dependency> --> 

    </dependencies> 

    <build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>${maven-compiler-plugin-version}</version> 
      <configuration> 
       <source>${source-jdk}</source> 
       <target>${target-jdk}</target> 
      </configuration> 
     </plugin> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>${maven-war-plugin-version}</version> 
      <configuration> 
       <warSourceDirectory>${war-source-directory}</warSourceDirectory> 
       <warName>${war-name}</warName> 
       <failOnMissingWebXml>false</failOnMissingWebXml> 
      </configuration> 
     </plugin> 
    </plugins> 
    <finalName>${final-name}</finalName> 
    </build> 
이다

0

package com.pdma.dmapp.configuration; 

@Configuration 
@EnableWebSecurity 
public class SecurityConfiguration extends WebSecurityConfigurerAdapter{ 

    @Autowired 
    public void configureGlobalSecurity(AuthenticationManagerBuilder auth) throws Exception 
    { 
     auth.inMemoryAuthentication() 
     .withUser("Admin") 
     .password("admin123") 
     .roles("Admin"); 
    } 

    @Override 
    public void configure(HttpSecurity http) throws Exception 
    { 
     http.authorizeRequests() 
     .antMatchers("/login","/webResources/**").permitAll() 
      .antMatchers("/**").access("hasRole('Admin')") 
      .and().formLogin() 
        .loginPage("/login") 
        .usernameParameter("username") 
        .passwordParameter("password") 
      .and().csrf() 
      .and().exceptionHandling().accessDeniedPage("/accessDenied"); 

     http.sessionManagement() 
      .maximumSessions(1) 
      .expiredUrl("/login.html"); 
    } 
} 

AppInitializer.java

package com.pdma.dmapp.configuration; 

public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{ 

    private static final String LOCATION = "D:/uploads/"; 
    private static final long MAX_FILE_SIZE = 1024*1024*200; 
    private static final long MAX_REQUEST_SIZE = 1024*1024*200; 
    private static final int FILE_SIZE_THRESHOLD = 0; 

    @Override 
    protected Class<?>[] getRootConfigClasses() { 
     // TODO Auto-generated method stub 
     return new Class [] {AppConfig.class, PersistenceContext.class, SecurityConfiguration.class}; 
    } 

    @Override 
    protected Class<?>[] getServletConfigClasses() { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    protected String[] getServletMappings() { 
     // TODO Auto-generated method stub 
     return new String [] {"/"}; 
    } 

    @Override 
    protected void customizeRegistration(ServletRegistration.Dynamic registration){ 
     registration.setMultipartConfig(getMultipartConfigElement()); 
    } 

    private MultipartConfigElement getMultipartConfigElement(){ 
     MultipartConfigElement element = new MultipartConfigElement(LOCATION, 
                    MAX_FILE_SIZE, 
                    MAX_REQUEST_SIZE, 
                    FILE_SIZE_THRESHOLD); 
     return element; 
    } 


    @Override 
    public void onStartup(ServletContext servletContext) throws ServletException { 
     super.onStartup(servletContext); 
     servletContext.addListener(new SessionListener()); 
    } 
} 

저장소

package com.pdma.dmapp.module.surveys.repo; 

@Transactional("jpaTXManager") 
@RepositoryRestResource(exported = true) 
public interface SurveyorRepo extends CrudRepository<Surveyor, Integer> { 

    Surveyor findByDeviceImeiNo1OrDeviceImeiNo2(String deviceImeiNo1, String deviceImeiNo2); 
    List<Surveyor> findByDistrictDistrictId(Integer districtId); 
} 

답변

2

먼저, 다음과 같은 방법으로 Sprint Data REST를 구성하려고 :

@Configuration 
public class CustomRepositoryRestConfiguration extends RepositoryRestMvcConfiguration { 
      @Override 
      public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config){ 
       config.setBasePath("/api"); 
      } 
... 
} 

을 또한 저장소 콩이 있는지 확인 Spring 컨텍스트 및 annotat에서 사용 가능 @RepositoryRestResource 주석을 첨부하십시오.

EDIT : 내가 주된 문제는 MVC와 Spring Data REST를 어떻게 섞어 놓은 것인가라고 생각한다. RepositoryRestConfigurerAdapter 대신 RepositoryRestMvcConfiguration을 사용하십시오. 설정 방법에 대한 자세한 안내는 공식 가이드 herehere에서 찾을 수 있습니다.

UPDATE : Spring Data REST 기본 경로의 최신 버전으로는 다른 방식으로 설정됩니다

@Configuration 
public class RestDataConfig extends RepositoryRestMvcConfiguration { 

    @Override 
    @Bean 
    public BaseUri baseUri() { 
     config().setBasePath("/api"); 
     return new BaseUri(config().getBaseUri()); 
    } 
} 
+0

는 이런 짓을 여전히 작동하지 않습니다. 내 구성 파일은 com.pdma.dmapp.configuration에 있습니다. 스캔 할 기본 패키지로 com.pdma.dmapp를 지정합니다. – ArslanAnjum

+0

그런 식으로 작동해야하지만 귀하의 경우 com.pdma.dmapp 기본 패키지에 config를 저장하는 것이 더 좋습니다. 또한 모든 Spring 구성과 저장소 코드를 공유하십시오. –

+0

구성 파일이 추가되었습니다. – ArslanAnjum

관련 문제