我已经在jpa存储库中添加了一个自定义方法,详见http://docs.spring.io/spring-data/data-jpa/docs/1.0.x/reference/html/#repositories.custom-implementations
据我所知,当我使用spring-data-rest时,这个方法不会暴露.有没有什么办法可以将它作为spring-data-rest生成的REST API的一部分发布(不用自己创建Spring MVC Controller)?
我创建了以下@RepositoryRestResource查询,我想为其余的api创建动态查询.所以基本上我想做的事情如下:
myHost/myApp/data/search/all?name=me&age=20&address=myhome&etc=etc
Run Code Online (Sandbox Code Playgroud)
所以我在下面创建了查询:
@Query("Select t from Data t " +
"where " +
"t.name like :name AND " +
"t.age = :age AND " +
"t.address = :address AND " +
"t.etc= :etc"
@RestResource(path = "all", rel = "all")
Page findByAll(@Param("name") String name, @Param("age") String age,
@Param("address") String address, @Param("etc") String etc, Page page);
Run Code Online (Sandbox Code Playgroud)
显然其中一些可能尚未输入.有没有办法在存储库中定义默认值?所以例如我想要name一个默认值%.
我不完全确定这种方法对于我想要做的是正确的,所以欢迎任何替代建议.
我正在构建一个REST API.我有一个由bean组成的域模型,而不能扩展ResourceSupport.使用Spring-HATEOAS将它们作为资源公开的最佳方法是哪种?
如果不可能,这是在bean生成的JSON上包含链接的最佳方式?
我有一个单例类(@Service annotated).该类有一个需要200/300ms才能执行的方法.
此方法使用@Cacheable和synchronized进行注释.
@Cacheable(value="nextPlaying", key = "#startingFrom.getYear() + #startingFrom.getMonth() + #startingFrom.getDay() + #startingFrom.getHours() + #startingFrom.getMinutes() + #locale.getLanguage()")
public synchronized List<Match> getNextPlaying(Date startingFrom, Locale locale)
Run Code Online (Sandbox Code Playgroud)
通过启动调用此方法的多个线程,我看到对于这些200/300ms,直到结果未缓存,它会一次又一次地执行该方法,直到缓存为止.似乎@Cacheable注释没有考虑到同步 ......这是一个错误吗?
我正在按照这里的示例进行操作:https : //www.baeldung.com/spring-boot-start
当我构建应用程序时,我没有得到包含所有依赖项的胖 jar,而只是一个包含项目编译类的 jar。
我粘贴下面的 pom.xml。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.baeldung</groupId>
<artifactId>spring-boot-bootstrap</artifactId>
<packaging>jar</packaging>
<name>spring-boot-bootstrap</name>
<description>Demo project for Spring Boot</description>
<parent>
<artifactId>parent-boot-2</artifactId>
<groupId>com.baeldung</groupId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../parent-boot-2</relativePath>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cloud-connectors</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId> …Run Code Online (Sandbox Code Playgroud) 通过使用以下代码,我可以使用 Spring Data JPA 调用存储过程。这是存储过程的映射,包含在用@Entity 注解的类中
@NamedStoredProcedureQuery(name = "testProc0", procedureName = "testproc", parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN, name = "input", type = String.class),
@StoredProcedureParameter(mode = ParameterMode.OUT, name = "output", type = String.class) })
Run Code Online (Sandbox Code Playgroud)
依次调用存储过程的方法,在前面提到的类对应的repository中定义,有以下两行:
@Procedure("testproc")
String testProc(String input);
Run Code Online (Sandbox Code Playgroud)
现在的问题是:我想创建一个只调用存储过程的模块。但是,这个新模块不会有任何用@Entity 注释的类,因此没有存储库。这可能吗?如果是,我应该把定义和调用存储过程的代码放在哪里?
我在Mule Studio工作区(从Mule Studio中)复制/粘贴了一个工作项目来创建一个新项目.在那之后,我可以在新项目上进行mvn clean安装,一切正常.
然后,在对pom进行任何修改(即添加一个空行)后,我收到以下错误(在项目名称上的感叹号上).我仍然可以毫无错误地执行mvn clean install并获得我可以部署的jar.但是,我想消除错误.
在项目ProjectName,studio:studio目标无法执行时构建问题,检查Maven Output控制台是否有日志
这是我在控制台中可以阅读的内容
[ERROR] No plugin found for prefix 'studio' in the current project and in the plugin groups [org.apache.maven.plugins, mojo.codehaus.maven.plugins, org.codehaus.mojo] available from the repositories [local (C:\_jde\maven\repo), nexus (http://nexusserver00:8080/nexus/content/groups/public)] -> [Help 1]
org.apache.maven.plugin.prefix.NoPluginFoundForPrefixException: No plugin found for prefix 'studio' in the current project and in the plugin groups [org.apache.maven.plugins, mojo.codehaus.maven.plugins, org.codehaus.mojo] available from the repositories [local (C:\_jde\maven\repo), nexus (http://nexusserver00:8080/nexus/content/groups/public)]
at org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolve(DefaultPluginPrefixResolver.java:94)
at org.apache.maven.lifecycle.internal.MojoDescriptorCreator.findPluginForPrefix(MojoDescriptorCreator.java:262)
at org.apache.maven.lifecycle.internal.MojoDescriptorCreator.getMojoDescriptor(MojoDescriptorCreator.java:222)
at org.apache.maven.lifecycle.internal.DefaultLifecycleTaskSegmentCalculator.calculateTaskSegments(DefaultLifecycleTaskSegmentCalculator.java:106)
at org.apache.maven.lifecycle.internal.DefaultLifecycleTaskSegmentCalculator.calculateTaskSegments(DefaultLifecycleTaskSegmentCalculator.java:86)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:98) …Run Code Online (Sandbox Code Playgroud) 我知道您可以通过以下方式访问 Spring JMS 侦听器中的标准标头:
public void receive(String in, @Header(JmsHeaders.MESSAGE_ID) String messageId)
Run Code Online (Sandbox Code Playgroud)
是否有任何类似的注释用于访问自定义属性?
我有一个用 @Cacheable 注释的方法。如果方法内部捕获到异常,我希望清除缓存。但是,缓存似乎是在清除缓存的行之后执行的方面加载的。因此,当方法中捕获到异常时,即使清除了缓存,空字符串结果仍保留在缓存中。
我应该从哪里清除缓存?
@Cacheable("myCache")
public String myMethod() {
String result="";
try {
result = doSomething();
} catch (Exception e) {
cacheManager.getCache("myCache").clear();
}
return token;
}
Run Code Online (Sandbox Code Playgroud) java ×9
spring ×8
spring-cache ×2
spring-data ×2
caching ×1
hateoas ×1
jms ×1
maven ×1
mule ×1
mule-studio ×1
rest ×1
spring-boot ×1
spring-jms ×1
spring-mvc ×1