如何配置服务和存储库类spring boot

时间:2017-09-28 11:29:08

标签: java spring spring-boot spring-annotations

@SpringBootApplication
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
@EnableScheduling
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

存储库:

@Repository
public interface FileRepository { }


public class FileRepositoryImpl implements FileRepository {}

服务和Impl:

@Service
public interface FileService { }


public class FileService implements FileService {

@Autowired 
FileReposiory repo;

}

任务:

@Component
public class DummyTask  {

    @Autowired
    private FileService fileService;



    public void run(String schedule) {
        fileService.runtask(schedule);
    }
}

我正在尝试使用上面的注释运行一个简单的应用程序。此应用程序没有REST端点或使用控制器。执行fileService时,我的nullDummyTask引用。

此外,当我运行Junit测试来测试FileRepository时,我也将fileRepository视为null。有人可以指出它是如何不满意以及如何纠正?

public class FileRepositoryTest {

    @Autowired
    private FileRepository fileRepository;


    @Test
    public void testGetCustomerDir() {

       //blah    
    }
}

我按如下方式执行我的任务:

 threadPoolTaskScheduler.schedule(new Job(reportSchedule), new CronTrigger(reportSchedule.getCronExpression()));

   class Job implements Runnable {
        private String schedule;

        public Job (String schedule) {
            this.schedule = schedule;
        }

        @Override
        public void run() {
           reportExportSchedulerTask.run(schedule);
        }
    }

1 个答案:

答案 0 :(得分:0)

DummyTask需要是一个Spring bean本身,以便Spring为你自动装配bean。您可以通过将其标记为@Component来解决此问题:

@Component
public class DummyTask implements Runnable {

    @Autowired
    private FileService fileService;


    @Override
    public void run() {
        fileService.runtask(blah);
    }
}

对于测试,您应该将其标记为@SpringBootTest。这将使测试的bean可以自动装配。

@RunWith(SpringRunner.class)
@SpringBootTest
public class FileRepositoryTest {

    @Autowired
    private FileRepository fileRepository;


    @Test
    public void testGetCustomerDir() {

       //blah    
    }
}