#spring-boot
#весенняя загрузка
Вопрос:
Нет соответствующего компонента типа ‘com.ms.common.subscription.доступен service.client.SubscriptionDetailService’: ожидается, по крайней мере, 1 компонент, который квалифицируется как кандидат на автоматическое подключение. Аннотации к зависимостям: {} У меня проблема в том, что я не могу запустить свой код, но я попробовал, добавив @Service @Repository
Ошибка возникает, когда я добавляю подписку в службу, иначе она может запускаться и отображать результат
Приложение (основной класс)
package com.ms.batch.inactiveUser;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
@SpringBootApplication
//(scanBasePackages={"com.ms.batch.inactiveuser"})
@ComponentScan(basePackages = {
"com.ms.core, "
"com.ms.batch.inactiveuser, "
"com.ms.common.subscription.service.client, "
"com.ms.common.subscription.strategy.appmode, "
"com.ms.batch.inactiveuser.rest.config "
})
@EntityScan("com.ms.batch.inactiveuser.rest.model.entity")
@EnableJpaRepositories("com.ms.batch.inactiveuser.rest.repository")
public class BatchInactiveUserApplication {
public static void main(String[] args) {
SpringApplication.run(BatchInactiveUserApplication.class, args);
}
}
DTO
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class CorporateUserDTO {
private String oranizationID;
private String coperateID;
// private String userCD;
private String userID;
private String userName;
private String localContactNo;
private String overseaContactNo;
// private String policyValue;
}
Обслуживание
package com.ms.batch.inactiveUser.rest.service;
import com.ms.batch.inactiveUser.rest.model.dto.CorporateUserDTO;
import com.ms.batch.inactiveUser.rest.model.entity.CorporateUser;
import com.ms.batch.inactiveUser.rest.model.entity.SecurityPolicy;
import com.ms.batch.inactiveUser.rest.model.entity.User;
import com.ms.batch.inactiveUser.rest.repository.InactiveUserRepository;
import com.ms.batch.inactiveUser.rest.repository.SecurityPolicyRepository;
import com.ms.batch.inactiveUser.rest.repository.UserRepository;
import com.ms.common.subscription.model.request.SubscriptionDetailRequest;
import com.ms.common.subscription.model.response.SubscriptionDetailResponse;
import com.ms.common.subscription.service.client.SubscriptionDetailService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service("inactiveUserService")
@Transactional
@AllArgsConstructor
@Slf4j
public class InactiveUserServiceImpl implements InactiveUserService {
@Autowired
private InactiveUserRepository inactiveUserRepository;
@Autowired
private SecurityPolicyRepository securityPolicyRepository;
@Autowired
private UserRepository userRepository;
@Autowired
// @Qualifier("SubscriptionDetailService")
private SubscriptionDetailService subscriptionDetailService;
@Override
public List<CorporateUserDTO> findCorporateUser() {
List<CorporateUserDTO> corporateUserDTOList = new ArrayList<>();
if(CollectionUtils.isEmpty(user)){
log.debug("testing user:error");
}else {
for (int i = 0; i < user.size(); i ) {
List<CorporateUser> corporateUser = inactiveUserRepository.findUser(user.get(i).getUserID());
log.debug("testing my: " corporateUser.get(0).getUserName());
String subscriptionCode = "IA_US";
for(int j = 0; j < corporateUser.size(); j ){
CorporateUserDTO corporateUserDTO = new CorporateUserDTO();
corporateUserDTO.setOranizationID(corporateUser.get(j).getCorporate().getOrganizationID());
corporateUserDTO.setCoperateID(corporateUser.get(j).getCorporateID());
corporateUserDTO.setUserID(user.get(j).getUserID());
corporateUserDTO.setUserName(corporateUser.get(j).getUserName());
corporateUserDTO.setLocalContactNo(corporateUser.get(j).getCorporate().getCountry().getLocalContactNo());
corporateUserDTO.setOverseaContactNo(corporateUser.get(j).getCorporate().getCountry().getOverseaContactNo());
corporateUserDTOList.add(corporateUserDTO);
Map<String, SubscriptionDetailResponse> subscriptionList = getSubscriptionDetails(corporateUserDTO.getUserID(),subscriptionCode);
log.debug("testing subscription: " subscriptionList);
}
}
}
return corporateUserDTOList;
}
@Override
// @Qualifier("SubscriptionDetailService")
@Bean
public Map<String, SubscriptionDetailResponse> getSubscriptionDetails(String userId, String subscriptionCode) {
log.debug("process getSubscriptionDetails - userId : " userId);
log.debug("process getSubscriptionDetails - subscriptionCode : " subscriptionCode);
SubscriptionDetailRequest subscriptionDetailRequest = new SubscriptionDetailRequest();
Map<String, Object> recipientSettingMap = new HashMap<String, Object>();
recipientSettingMap.put("userId", userId);
subscriptionDetailRequest.setSubscriptionItemCode(subscriptionCode);
subscriptionDetailRequest.setRecipientSettingValue(recipientSettingMap);
return subscriptionDetailService.getSubscriptionDetails(subscriptionDetailRequest);
}
}
Controller
package com.ms.batch.inactiveUser.rest.controller;
import com.ms.batch.inactiveUser.rest.service.InactiveUserService;
import com.ms.batch.inactiveUser.rest.model.dto.CorporateUserDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
@RestController
@RequestMapping(value = "/v1")
@Slf4j
public class InactiveUserController {
@Autowired
private InactiveUserService inactiveUserService;
@PostMapping(value = "/getReceipentUserInactive")
@ResponseStatus(HttpStatus.OK)
public List<CorporateUserDTO> getCorporateUser(HttpServletRequest request){
//CorporateUser username= inactiveUserService.getAll();
//CorporateUserVO corporateUserVO = (CorporateUserVO)request.getAttribute();
return inactiveUserService.findCorporateUser();
}
}
Repository
package com.ms.batch.inactiveUser.rest.repository;
import com.ms.batch.inactiveUser.rest.model.entity.CorporateUser;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.UUID;
@Repository
public interface InactiveUserRepository extends JpaRepository<CorporateUser, UUID> {
@Query("select u,t,prov from CorporateUser u "
"join u.corporate t "
"join t.country prov "
"where "
nvl(sec.lastLogon,cast(sec.dateCreated as date))) ")
List<CorporateUser>findUser(@Param("userid")String userid);
}
Интерфейс службы
public interface InactiveUserService {
List<CorporateUserDTO> findCorporateUser();
// List<UserVO> findUser();
Map<String, SubscriptionDetailResponse> getSubscriptionDetails(String userId, String subscriptionCode);
}
Ошибка при отладке
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.ms.batch.inactiveUser.rest.repository.InactiveUserRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
at
org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:228) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1358) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878) ~[spring-context-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) ~[spring-context-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) ~[spring-boot-2.2.4.RELEASE.jar:2.2.4.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) ~[spring-boot-2.2.4.RELEASE.jar:2.2.4.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) ~[spring-boot-2.2.4.RELEASE.jar:2.2.4.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) ~[spring-boot-2.2.4.RELEASE.jar:2.2.4.RELEASE]
at com.ocbc.ms.batch.inactiveUser.BatchInactiveUserApplication.main(BatchInactiveUserApplication.java:26) ~[classes/:na]
2020-08-21 11:04:12.490 ERROR 10992 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 0 of constructor in com.ms.batch.inactiveUser.rest.service.InactiveUserServiceImpl required a bean of type 'com.ms.batch.inactiveUser.rest.repository.InactiveUserRepository' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
Action:
Consider defining a bean of type 'com.ms.batch.inactiveUser.rest.repository.InactiveUserRepository' in your configuration.
Disconnected from the target VM, address: '127.0.0.1:57489', transport: 'socket'
Process finished with exit code 1
Комментарии:
1. Отредактируйте вопрос, чтобы добавить код и структуру пакета
2. я отредактировал код для службы, репозитория и контроллера, пожалуйста, помогите, спасибо
3. пожалуйста, добавьте свой основной класс.
4. добавлен основной класс
5. Эй, @MyMickei, ваш код выглядит правильным для меня. У меня только одна проблема в этой строке
@EnableJpaRepositories("com.ms.bactch.inactiveuser.rest.repository")
неправильное написание batch, возможно, по той же причине, по которой компонент не был найден