@Configuration
@EnableCaching
public class CacheConfig extends CachingConfigurerSupport {
@Bean
public JedisConnectionFactory redisConnectionFactory() {
JedisConnectionFactory redisConnectionFactory = new JedisConnectionFactory();
// Defaults
redisConnectionFactory.setHostName("127.0.0.1");
redisConnectionFactory.setPort(6379);
return redisConnectionFactory;
}
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory cf) {
RedisTemplate<String, String> redisTemplate = new RedisTemplate<String, String>();
redisTemplate.setConnectionFactory(cf);
return redisTemplate;
}
@Bean
public CacheManager cacheManager(RedisTemplate redisTemplate) {
RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
// Number of seconds before expiration. Defaults to unlimited (0)
cacheManager.setDefaultExpiration(300);
return cacheManager;
}
}
////
@Repository
public class StudentRepositoryImpl implements StudentRepository {
private static final String KEY = "Student";
private RedisTemplate<String, Student> redisTemplate;
private HashOperations hashOps;
@Autowired
private StudentRepositoryImpl(RedisTemplate redisTemplate) {
this.redisTemplate = redisTemplate;
}
@PostConstruct
private void init() {
hashOps = redisTemplate.opsForHash();
}
public void saveStudent(Student student) {
hashOps.put(KEY, student.getId(), student);
}
public void updateStudent(Student student) {
hashOps.put(KEY, student.getId(), student);
}
public Student findStudent(String id) {
return (Student) hashOps.get(KEY, id);
}
public Map<Object, Object> findAllStudents() {
return hashOps.entries(KEY);
}
public void deleteStudent(String id) {
hashOps.delete(KEY, id);
}
}
///
以上是我的redis配置的代码。
@Component
public class dataloader implements ApplicationRunner {
private StudentRepositoryImpl s;
@Autowired
public dataloader(StudentRepositoryImpl s){
this.s = s;
}
@Override
public void run(ApplicationArguments applicationArguments) throws Exception {
System.out.println("hi");
Student student = new Student("Eng2015001", "John Doe", Student.Gender.MALE, 1);
s.saveStudent(student);
}
}
我正在使用上面的数据加载器在我的redis中加载一些数据。
但是,我收到以下错误。
2017-05-16 10:29:06.238 INFO 7432 --- [ main] c.e.R.RedisCacheExampleApplication : Starting RedisCacheExampleApplication on PCdessy with PID 7432 (C:\Users\desmond\Desktop\SpringBoot\RedisCacheExample\target\classes started by desmond in C:\Users\desmond\Desktop\SpringBoot\RedisCacheExample)
2017-05-16 10:29:06.242 INFO 7432 --- [ main] c.e.R.RedisCacheExampleApplication : No active profile set, falling back to default profiles: default
2017-05-16 10:29:06.597 INFO 7432 --- [ main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@17f23d9: startup date [Tue May 16 10:29:06 SGT 2017]; root of context hierarchy
2017-05-16 10:29:07.830 INFO 7432 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2017-05-16 10:29:07.861 INFO 7432 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2017-05-16 10:29:08.985 INFO 7432 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
2017-05-16 10:29:08.995 INFO 7432 --- [ main] o.apache.catalina.core.StandardService : Starting service Tomcat
2017-05-16 10:29:08.996 INFO 7432 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.14
2017-05-16 10:29:09.174 INFO 7432 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2017-05-16 10:29:09.174 INFO 7432 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 2579 ms
2017-05-16 10:29:09.405 INFO 7432 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]
2017-05-16 10:29:09.408 INFO 7432 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'metricsFilter' to: [/*]
2017-05-16 10:29:09.409 INFO 7432 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*]
2017-05-16 10:29:09.409 INFO 7432 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2017-05-16 10:29:09.409 INFO 7432 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2017-05-16 10:29:09.409 INFO 7432 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*]
2017-05-16 10:29:09.409 INFO 7432 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'webRequestLoggingFilter' to: [/*]
2017-05-16 10:29:09.409 INFO 7432 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'applicationContextIdFilter' to: [/*]
2017-05-16 10:29:09.451 WARN 7432 --- [ main] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Tomcat.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.tomcat.jdbc.pool.DataSource]: Factory method 'dataSource' threw exception; nested exception is org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException: Cannot determine embedded database driver class for database type NONE. If you want an embedded database please put a supported one on the classpath. If you have database settings to be loaded from a particular profile you may need to active it (no profiles are currently active).
2017-05-16 10:29:09.453 INFO 7432 --- [ main] o.apache.catalina.core.StandardService : Stopping service Tomcat
2017-05-16 10:29:09.467 INFO 7432 --- [ main] utoConfigurationReportLoggingInitializer :
Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
2017-05-16 10:29:09.471 ERROR 7432 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
Cannot determine embedded database driver class for database type NONE
Action:
If you want an embedded database please put a supported one on the classpath. If you have database settings to be loaded from a particular profile you may need to active it (no profiles are currently active).
Process finished with exit code 1
我在这里做错了什么?顺便说一句,我的属性文件是空的。非常感谢你。
答案 0 :(得分:0)
尝试这样做(每个bean对象应该是@Autowired而不是仅使用“new”运算符初始化它):
@Configuration
@EnableCaching
public class CacheConfig extends CachingConfigurerSupport {
@Bean
public JedisConnectionFactory jedisConnectionFactory() {
JedisConnectionFactory redisConnectionFactory = new JedisConnectionFactory();
// Defaults
redisConnectionFactory.setHostName("127.0.0.1");
redisConnectionFactory.setPort(6379);
return redisConnectionFactory;
}
@Bean
public RedisTemplate<String, String> redisTemplate(@Autowired JedisConnectionFactory cf) {
RedisTemplate<String, String> redisTemplate = new RedisTemplate<String, String>();
redisTemplate.setConnectionFactory(cf);
return redisTemplate;
}
@Bean
public CacheManager cacheManager(@Autowired RedisTemplate redisTemplate) {
RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
// Number of seconds before expiration. Defaults to unlimited (0)
cacheManager.setDefaultExpiration(300);
return cacheManager;
}
}
@Repository
public class StudentRepositoryImpl implements StudentRepository {
private static final String KEY = "Student";
private RedisTemplate<String, Student> redisTemplate;
private HashOperations hashOps;
@Autowired
private StudentRepositoryImpl(RedisTemplate redisTemplate) {
this.redisTemplate = redisTemplate;
}
@PostConstruct
private void init() {
hashOps = redisTemplate.opsForHash();
}
public void saveStudent(Student student) {
hashOps.put(KEY, student.getId(), student);
}
public void updateStudent(Student student) {
hashOps.put(KEY, student.getId(), student);
}
public Student findStudent(String id) {
return (Student) hashOps.get(KEY, id);
}
public Map<Object, Object> findAllStudents() {
return hashOps.entries(KEY);
}
public void deleteStudent(String id) {
hashOps.delete(KEY, id);
}
}