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

how to configure service and repository classes spring boot

@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 {}

服务与实施:

@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在执行DummyTask时有null引用。

另外,当我运行使用 Junit 测试来测试 FileRepository 时,我也得到 fileRepository 为空。有人可以指出它是如何不满意的以及如何纠正吗?

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);
        }
    }

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    
    }
}