Tag: spring

Group By:Spring JPA规格

我正在尝试使用Spring Data JPA规范,并想知道如何在规范中使用Group By 。 请参阅下面我当前的规格: 知识库 public interface OauthAccessTokenRepository extends JpaRepository, JpaSpecificationExecutor { } 规格 public class OauthAccessTokenSpecification { public static Specification equalsTokenId(final String tokenId) { return new Specification() { public Predicate toPredicate(Root root,CriteriaQuery query, CriteriaBuilder cb) { return cb.equal(root.get(“tokenId”), tokenId); } }; } public static Specification equalsRefreshToken(final String refreshToken) { return new Specification() […]

{Core Java with Spring}通过普通JDBC调用PL SQL存储过程 – 谁应该理想地进行事务管理

我的应用程序从Java / Spring调用Oracle存储过程。 没有Hibernate或iBatis或Spring JDBC模板。 从没有业务逻辑检查,没有validation的意义上讲,这个服务器端/中间层是“瘦的”; 它只是UI和数据库之间的数据传输层。 java代码在数据检索或数据持久性的情况下调用存储过程。 存储过程是与各种表/表关系交互并聚合数据的大家伙。 问题 – 在这种情况下,谁应该理想地管理交易? 从Java代码还是从存储过程? 通常,当中间层管理数据或执行业务逻辑,或者validation时,我们将使用普通的JDBC / ORM框架与各种表进行交互,从而管理事务。 但在我的用例中,SP正在与表进行交互,决定数据是否被正确检索或能够持久,为什么它应该依靠中间层来单独管理事务。 它可以很好地知道是提交事务还是回滚事务。 在数据检索的情况下总是编写一个为聚合函数作为高级接口的SP,或者在数据持久化的情况下编写汇总函数,并最终执行事务提交或事务回滚,这不是更好吗? 只有在预期为特定操作调用多个SP时,中间层才需要处理事务管理。 只要java代码只为特定操作[fetch / update / delete]调用一个SINGLE存储过程,管理存储过程本身的事务提交和回滚是不是很好? 如果SP内部出现问题,它可以回滚事务并引发exception,然后Java会将该exception消息[或记录并将自定义exception传递]传递给UI。 反问题是让SP在遇到任何exception的情况下引发exception,并且Java代码反过来捕获exception并执行事务回滚。 如果在调用SP时没有exception,则让它进行事务提交。 但是在这里,SP已经知道事务是成功还是失败,那么为什么我们不能自己进行提交或回滚,而是以exception或无exception的forms传递该信息并让java代码执行提交/回滚? 更新:certificate需要Java代码来管理事务的一件事是它调用MULTIPLE SP进行SINGLE操作。 但是,同样的结果可以通过一个高级例程来实现,该例程执行内部调用各个例程的逻辑,最后做出提交/回滚的决定。 请分享您对此的想法/建议/设计建议。 PS:我这里没有共享任何代码,但这是一个程序设计问题,关于谁应该管理交易?

用于拦截所有exception的Spring AOP配置

我正在努力编写/配置一个ThrowsAdvice拦截器,我想拦截整个项目中抛出的所有exception: public class ExceptionsInterceptor implements ThrowsAdvice { public void afterThrowing(final Method p_oMethod, final Object[] p_oArgArray, final Object p_oTarget, final Exception p_oException) { System.out.println(“Exception caught by Spring AOP!”); } } 我已经成功配置了一个MethodInterceptor实现,它拦截了我想要分析的特定方法(看看它们执行需要多长时间)。 这是我到目前为止的XML配置文件: 我的ProfilingInterceptor工作得很完美,并且当我的Main :: doSomething()方法被调用时精确拦截 – 所以我知道我是ontrack。 使用XmlSpy来查看Spring AOP的模式,看起来我可以添加类似下面的内容,以便让我的ExceptionsInterceptor拦截所有抛出的exception: 但是我找不到任何以此为例的文档,我不知道如何配置方法属性,使其成为“通配符”(*)并匹配所有类和所有方法。 谁能指出我正确的方向? 提前致谢!

无知我在设置Spring Boot REST应用程序时遇到了什么问题

在设置我认为是一个简单的Spring Boot Rest api的时候,我一直很困惑我做错了什么。 我确实有建立非常基本的春季应用程序(仍然是学生)的经验,但这是我第一次设置一个Spring Rest应用程序。 我确实在基本文件夹中有应用程序,应用程序似乎启动但是当我转到“localhost:8080 /”时出现404错误。 我假设也许我的pom不正确。 我注意到我的打印跟踪没有显示正在暴露的存储库。 谢谢你的帮助。 主要: @SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } } BaseEntity: @MappedSuperclass public abstract class BaseEntity { @Id @GeneratedValue(strategy = GenerationType.AUTO) private final Long id; protected BaseEntity() { id = null; } } 实体: @Entity public class Course […]

并发使用JaxWsPortProxyFactoryBean

我正在使用JaxWsPortProxyFactoryBean (Spring 3.1.2)来访问远程Web服务。 在文档中,我找不到有关JaxWsPortProxyFactoryBean并发使用的任何内容。 是否允许与线程同时使用它? 如果是这样,是否可以动态更改enpoint地址,以便不同的线程可以为同一个JaxWsPortProxyFactoryBean使用不同的端点?

将MySQL连接到Spring应用程序

我想使用MySQL数据库,而不是像hsqldb那样使用运行时数据库。 我克隆了这个存储库 ,它使用hsqldb作为其数据库。 因为我想学习如何使用基于rest的spring应用程序的关系数据库。 所以我对pom.xml进行了以下更改:更改了pom.xml: 4.0.0 org.springsource.restbucks restbucks war 1.0.0.BUILD-SNAPSHOT Spring RESTBucks org.springframework.boot spring-boot-starter-parent 1.1.5.RELEASE Evans-RC1 8.0.9 org.springframework.boot spring-boot-starter-data-rest org.springframework.boot spring-boot-starter-data-jpa org.hibernate hibernate-entitymanager org.springframework.boot spring-boot-starter-test org.jadira.usertype usertype.extended 3.2.0.GA com.fasterxml.jackson.datatype jackson-datatype-jsr310 org.hibernate hibernate-entitymanager mysql mysql-connector-java org.springframework spring-tx-events 1.0.0.BUILD-SNAPSHOT org.projectlombok lombok 1.14.4 provided com.jayway.jsonpath json-path org.apache.maven.plugins maven-compiler-plugin 1.8 1.8 org.springframework.boot spring-boot-maven-plugin spring-libs-snapshot http://repo.spring.io/libs-snapshot true spring-libs-snapshot http://repo.spring.io/libs-snapshot true […]

使用dao接口和实现实现Generic Abstract Entity类

嘿我想有通用模型/实体类,可以从db下载类型为long元素的id。 方法是这样的: public class GenericModel { @Id @GeneratedValue(strategy = GenerationType.AUTO) public Long id; public static GenericModel getBy(Long id) { return JPA.em().find(GenericModel.class, id); } } 但是在子模型类中扩展的Generic模型中,我必须动态声明要在db中查找的实体类名。 我想有通用实体类,我将有常见的方法,如getById()。 该generics类将由concret实体类扩展。 我不必在每个模型类中编写相同的方法,因为它将inheritance自generics类 – 我怎么能得到这个? 这是我的DAO界面。 我不太确定: public interface GenericModelDao { public void add(T entityClass); public void update(T entityClass); public void delete(long id); public T get(long id); public List get(); […]

从属性文件加载JPA存储库查询

我需要从属性文件中加载存储库中的查询。 例如,这里: @Repository public interface StudentRepository extends JpaRepository { @Query(value=”SELECT * FROM student where year= :le”, native=true) public List getStudentsByLevel(@Param(“le”) int level); } 我需要从属性文件中加载”SELECT * FROM student where year= :le”字符串。 有什么办法吗?

如何以编程方式将AccessLogValve添加到Tomcat?

我正在开发一个Spring启动应用程序,我想通过我的slf4j日志系统将Tomcat的访问日志路由到远程系统日志。 因为它是Spring,所以我想避免触及tomcat的server.xml文件。 我的AccessLogValve非常简单: import java.io.CharArrayWriter; import org.apache.catalina.valves.AccessLogValve; public class Log4JAccessLogValve extends AccessLogValve { @Override public void log(CharArrayWriter message) { log.info(message.toString()); } } 而且我希望可以使用这样的东西将它连接到Tomcat: @Component public class LogConfig { @Autowired private ServletContext servletContext; @PostConstruct public void setAccessLogValve() { ((ApplicationContextFacade)servletContext).addValve(new Log4JAccessLogValve()); } } 除了addValve()方法不存在… 那么……任何人都知道如何在我的AccessLogValve中挂钩? 我也接受完全不同的建议,以获取访问日志到远程系统日志,但我们正在制作数十个微服务,所以它必须是一个非常标准化的方法,很容易实现每个微服务。

从Angular 2向Spring支持的Java应用程序发送POST请求时出现CSRF问题

我有使用Angular 2和基于Java的后端编写的UI,它在Spring Security之上使用OpenID Connect身份validation。 身份validation工作正常,但仅适用于GET请求。 每次在资源上执行POST,PUT或DELETE方法时,我都会收到HTTP 403: { “status”: 403, “message”: “Invalid CSRF Token ‘null’ was found on the request parameter ‘_csrf’ or header ‘X-CSRF-TOKEN’.”, } 我像这样使用HttpClient: http.post( ‘/api/my-resource’, JSON.stringify(myObject), new RequestOptions({ headers: new Headers({‘Content-Type’: ‘application/json’}) }) ) 当我添加withCredentials: true 这里提出的RequestOptions,我仍然得到HTTP 403但是有不同的消息: { “status”: 403, “message”: “Could not verify the provided CSRF token because your […]