@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
时,我的null
有DummyTask
引用。
此外,当我运行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);
}
}
答案 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
}
}