我正在尝试使用cassandra配置spring数据.但是当我的应用程序在tomcat中部署时,我收到了轰鸣声错误.
当我检查连接时,它可用于给定端口.(127.0.0.1:9042).我有下面的堆栈跟踪和弹簧配置.有没有人对这个错误有所了解?
完整堆栈跟踪:
2015-12-06 17:46:25 ERROR web.context.ContextLoader:331 - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cassandraSession': Invocation of init method failed; nested exception is com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: /127.0.0.1:9042 (com.datastax.driver.core.exceptions.InvalidQueryException: unconfigured table schema_keyspaces))
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1572)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:736)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:759)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:434)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4994)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5492)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:649)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1245)
at …Run Code Online (Sandbox Code Playgroud) 我正在编写一个代码生成工具来使用Spring-Data-Jpa为Spring启动应用程序生成后端连接代码,而且我很温和地告诉我CrudRepository中的方法返回Iterable而不是List,因为iterable不能提供足够的功能,但List,所以我正在寻找将iterable转换为列表的最佳方法.
我看到这篇关于将迭代更改为集合的帖子我想知道,为什么不将它转换为List,而不是使用像Guava这样的库或实现我自己的函数来进行转换?这样做我不知道有什么问题吗?
编辑:我问,因为它是一个代码生成工具,使它生成引入第三方库依赖的代码是不合理的,编写我自己的函数来进行转换也不合理,因为它必须住在某个地方而且我宁愿在生成的代码中没有它.一个简单的演员会有用,如果有点难看,但只是想知道是否有我遗失的东西?
是否可以使用Spring Data创建只读存储库?
我有一些实体链接到视图和一些子实体,我想为其提供一些存储库,其中包含一些方法findAll(),findOne()以及一些带有@Query注释的方法.我想避免提供类似的方法save(…),delete(…)因为它们没有任何意义,可能会产生错误.
public interface ContactRepository extends JpaRepository<ContactModel, Integer>, JpaSpecificationExecutor<ContactModel> {
List<ContactModel> findContactByAddress_CityModel_Id(Integer cityId);
List<ContactModel> findContactByAddress_CityModel_Region_Id(Integer regionId);
// ... methods using @Query
// no need to save/flush/delete
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
我对使用Spring Data的MongoDB有疑问.我有这些域类:
@Document
public class Deal {
@Id
private ObjectId _id;
private Location location;
private User user;
private String description;
private String title;
private String price;
private boolean approved;
private Date expirationDate;
private Date publishedDate;
}
@Document
public class Location {
@Id
private ObjectId _id;
private Double latitude;
private Double longitude;
private String country;
private String street;
private String zip;
}
@Document
public class User {
@Id
private ObjectId _id;
private String email;
private String password;
private String profile_image_url;
private …Run Code Online (Sandbox Code Playgroud) 我有一个用Spring-Data制作的数据访问层.我现在正在创建一个Web应用程序.这个控制器方法应返回格式为JSON 的Spring-Data页面.
这样的页面是一个列表,其中包含额外的分页信息,例如记录总数等等.
这是可能的,如果是的话怎么样?
与此直接相关,我可以定义属性名称的映射吗?例如.意思是我需要定义如何在JSON中命名分页信息属性(与页面不同).这可能吗?怎么样?
我不想硬编码常量值,我宁愿通过引用变量指定它们.
例如,而不是写下一个查询:
@Query(value = "SELECT u FROM UserModel u WHERE u.status = 1")
Run Code Online (Sandbox Code Playgroud)
..我想提取硬编码值'1'并写下如下内容:
@Query(value = "SELECT u FROM UserModel u WHERE u.status = UserModel.STATUS_ACTIVE") //doesn't compile
Run Code Online (Sandbox Code Playgroud)
有没有办法像弹簧数据查询中的第二个例子那样指定常量?
我正在使用spring-data-rest,我有一个像这样的MongoRepository:
@RepositoryRestResource
interface MyEntityRepository extends MongoRepository<MyEntity, String> {
}
Run Code Online (Sandbox Code Playgroud)
我想允许GET方法,但禁用PUT,POST,PATCH和DELETE(只读Web服务).
@RepositoryRestResource
interface MyEntityRepository extends MongoRepository<MyEntity, String> {
@Override
@RestResource(exported = false)
public MyEntity save(MyEntity s);
@Override
@RestResource(exported = false)
public void delete(String id);
@Override
@RestResource(exported = false)
public void delete(MyEntity t);
}
Run Code Online (Sandbox Code Playgroud)
它似乎不起作用,因为我仍然可以执行PUT,POST,PATCH和DELETE请求.
我想要一个带有两个参数的spring数据存储库接口.有没有办法让它有以下行为?
MyObject findByParameterOneAndParameterTwo( String parameterOne, String parameterTwo);
Run Code Online (Sandbox Code Playgroud)
如果两个参数都有一个值,我希望它能正常运行并为两个值执行"AND".
例如,如果第二个参数为null,则它仅搜索ParameterOne
有什么建议?
我有一个Products在我的MongoDB数据库中调用的集合,它由IProductPrice我的Java代码中的接口表示.以下存储库声明会导致Spring Date查看该集合db.collection: Intelliprice.iProductPrice.
我希望它将其配置为db.collection: Intelliprice.Products使用外部配置而不是放置@Collection(..)注释IProductPrice.这可能吗?我怎样才能做到这一点?
public interface ProductsRepository extends
MongoRepository<IProductPrice, String> {
}
Run Code Online (Sandbox Code Playgroud) 我正在使用
我希望findOne在我的Spring Data存储库中有一个带有悲观锁的findOne方法,该方法与已经提供的方法分开.
根据这个答案,我写道:
public interface RegistrationRepository extends CrudRepository<Registration, Long> {
@Lock(LockModeType.PESSIMISTIC_WRITE)
@Query("select r from Registration r where r.id = ?1")
Registration findOnePessimistic(Long id);
}
Run Code Online (Sandbox Code Playgroud)
这几乎可行.
不幸的是,这不会刷新实体管理器缓存中我的实体的先前实例.我有两个并发请求更新我的注册状态
因此破坏了行为.
任何线索为什么@Lock没有开箱即用刷新实体经理?
更新
这是请求的示例代码:
public interface RegistrationRepository extends CrudRepository<Registration, Long> {
@Lock(LockModeType.PESSIMISTIC_WRITE)
@Query("select r from registration_table r where r.id = ?1")
Registration findOnePessimistic(Long id);
}
public void RegistrationService {
@Transactional
public void …Run Code Online (Sandbox Code Playgroud) spring-data ×10
spring ×9
java ×8
mongodb ×2
spring-boot ×2
cassandra ×1
datastax ×1
jpa ×1
jpql ×1
json ×1
spring-mvc ×1