我对maven不太熟悉,在尝试使用多模块项目时,我开始想知道如何为父maven pom中的所有子模块指定java版本.直到今天我才使用:
<properties>
<java.version>1.8</java.version>
</properties>
Run Code Online (Sandbox Code Playgroud)
但是在研究时我发现你也可以在maven编译器插件中指定java版本,就像那样:
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
Run Code Online (Sandbox Code Playgroud)
然后将其包装到插件管理标签中以启用子poms的使用.所以第一个问题是在属性和maven编译器插件中设置java版本有什么区别?
我找不到明确的答案,但在研究过程中我发现你也可以用这种方式指定java版本:
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
Run Code Online (Sandbox Code Playgroud)
这表明编译器插件就在那里,即使我没有明确声明它.运行mvn包输出
maven-compiler-plugin:3.1:compile (default-compile) @ testproj ---
Run Code Online (Sandbox Code Playgroud)
和其他一些我没有声明的插件.那些插件默认是隐藏的maven pom的一部分吗?在属性和maven插件配置元素中设置源/目标是否有任何差异?
还有一些其他问题 - 应该采用哪种方式(以及何时不相等)?哪一个最适合多模块项目,如果在pom中指定的java版本与JAVA_HOME中指向的版本不同,会发生什么?
我正在开发使用 Spring Data JPA 作为其持久层的 Spring Boot Web 应用程序。从存储库检索实体时,我使用 Spring 的 Data JPASort对象对它们进行排序。当我按检索到的实体属性或 @OneToOne 关系对象属性进行排序时,它会起作用,但我想用它来按 @OneToMany 关系对象属性之一进行排序。
让我们用一个例子来解释:假设我有一个实体对象Author,它与另一个实体有一对多的关系Book。我的最简单形式的实体类如下所示:
@Entity
public class Author {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@OneToMany(mappedBy = "author")
private List<Book> books;
<constructor, getters, setters etc.>
}
Run Code Online (Sandbox Code Playgroud)
和
@Entity
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String title;
@ManyToOne
@JoinColumn(name = "author_id")
private Author author;
<constructor, getters, setters etc.>
}
Run Code Online (Sandbox Code Playgroud)
现在,当我使用 Spring 的存储库接口检索作者时,我将 Sort …
我正在尝试在我的项目中使用Hibernate Search(现在使用junit + dbunit编写测试),但搜索查询不会返回任何结果.我昨天研究了这个问题并得出结论,问题是Hibernate Search与dbunit @DatabaseSetup不兼容(类似于这个未回答的问题中的类似问题:链接).我将提供更多细节,但首先是冷杉,有我的实体类:
@Entity
@Indexed
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "userId")
private Long id;
(...)
@Column(nullable = false, unique = true)
@Field(index = Index.YES, analyze=Analyze.YES, store=Store.NO)
private String email;
(...)
@Column(nullable = false, unique = true)
@Field(index = Index.YES, analyze=Analyze.YES, store=Store.NO)
private String username;
(...)
}
Run Code Online (Sandbox Code Playgroud)
我通过我的DAO将它保存到db:
@Repository
public class UserDAOImpl implements UserDAO {
@Autowired
private SessionFactory sessionFactory;
@Override
public long save(User toSave) {
return (Long) this.sessionFactory.getCurrentSession().save(toSave);
}
(...)
} …Run Code Online (Sandbox Code Playgroud) 问题
有没有办法全局处理MessageDeliveryExceptionSpring WebSocket 模块中由错误(通常权限不足)引起的Spring Messaging ?
用例
我已经通过 STOMP 实现了 Spring WebSockets 以支持我的 web 应用程序中的 ws 连接。为了保护 websocket 端点,我创建了授权用户在 STOMP CONNECT 时间启动 STOMP 会话的拦截器(如 Spring 文档中 22.4.11 部分的建议):
@Component
public class StompMessagingInterceptor extends ChannelInterceptorAdapter {
// Some code not important to the problem
@Override
public Message<?> preSend(Message<?> message, MessageChannel channel) {
StompHeaderAccessor headerAccessor = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class);
switch (headerAccessor.getCommand()) {
// Authenticate STOMP session on CONNECT using jwt token passed as a STOMP login header - it's …Run Code Online (Sandbox Code Playgroud) java spring spring-security spring-messaging spring-websocket
我有支持 Spring Websocket 的 Spring 服务器。我想使用 STOMP 子协议来处理通过 Web 套接字的通信,因此 STOMP 端点的配置如下所示:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/chat")
.setAllowedOrigins("*")
.withSockJS();
}
}
Run Code Online (Sandbox Code Playgroud)
Spring 文档以及我能找到的有关该主题的基本上任何资源都展示了如何使用 SockJS + StompJS 创建 STOMP 客户端。它有效,但据我所知根本不需要它 - 因为 STOMP 只是一个子协议,我应该能够通过使用 STOMP 消息语法基本上从任何 Web 套接字客户端与我的服务器进行通信。
假设我只想从 Google Chrome Simple Web Socket Client 插件连接到我的 STOMP 服务器。根据 STOMP 规范,我做的第一件事是打开 Web 套接字连接。我这样做
ws://my.server.here/chat/websocket
关联。这部分工作,我的连接建立。现在我想使用STOMP。再次正如 STOMP 规范所说,我现在应该发送如下所示的 CONNECT 命令(STOMP 1.1):
CONNECT
accept-version:1.0,1.1
host:my.host.here
^@
Run Code Online (Sandbox Code Playgroud)
然后我希望服务器使用 CONNECTED 命令做出响应,但我什么也没得到。如果我将使用一些不存在的命令(如“WRONG_COMMAND”)而不是“CONNECT”,那么我可以看到有关未知命令的 Spring 异常被抛出,所以我想我的消息命中了 Spring 的 Websocket …
我在Vaadin和JavaEE中都很新,我认为我有基本的问题,但很乐意提供帮助.
我的Vaadin项目中有3个类,它们是:主类,只响应启动和创建导航器:
public class MyprojectUI extends UI {
public Navigator navigator;
public static final String SECOND_VIEW = "SecondView";
@WebServlet(value = "/*", asyncSupported = true)
@VaadinServletConfiguration(productionMode = false, ui = MyprojectUI.class)
public static class Servlet extends VaadinServlet {
}
@Override
protected void init(VaadinRequest request) {
final VerticalLayout layout = new VerticalLayout();
layout.setMargin(true);
setContent(layout);
ComponentContainerViewDisplay viewDisplay = new ComponentContainerViewDisplay(layout);
navigator = new Navigator(UI.getCurrent(), viewDisplay);
navigator.addView("", new FirstView());
navigator.addView(SECOND_VIEW, new SecondView());
}
}
Run Code Online (Sandbox Code Playgroud)
和两个观点类:
public class FirstView extends HorizontalLayout implements View {
TextArea …Run Code Online (Sandbox Code Playgroud)