小编sbr*_*tla的帖子

如何在Spring中使用注释自动装配第三方类?

Spring Boot上的大多数示例都发现我专注于构建简单的Web应用程序.也就是说,您完全可以完全控制所有内容的Web应用程序.

另一方面,我没有太多运气找到如何构建非Web应用程序的示例,其中应用程序的较大部分依赖于第三方代码.

考虑com.mypackage.Application下面的课程.

package com.mypackage;

import com.3rdparty.factory.ServiceFactory;

public class Application {

  private final ServiceFactory sf;

  public Application(ServiceFactory sf) {
    this.sf = sf;
  }

  public void doSomeWork() {
    ServiceA sa = sf.getServiceA();
    [...]
}
Run Code Online (Sandbox Code Playgroud)

Application类只实例化DefaultManager,并调用run().

现在,第三方ServiceFactory类有其他依赖项:

package com.3rdparty.factory;

import com.3rdparty.service.ServiceA;
import com.3rdparty.service.ServiceA;

public class ServiceFactory {

  private final ServiceA sa;
  private final ServiceB sb;

  public ServiceFactory(ServiceA sa, ServiceB sb) {
    this.sa = sa;
    this.sb = sb;
  }

  public ServiceA getServiceA() …
Run Code Online (Sandbox Code Playgroud)

spring autowired spring-boot

4
推荐指数
1
解决办法
3555
查看次数

MySQL和性能:使用'IN'或'JOIN'?

我有一些代码,它们通过ID查找数据库中的几张CD.这是使用'IN'条件完成的:

(1) SELECT * FROM album WHERE id IN (?,?,?,?,?)
Run Code Online (Sandbox Code Playgroud)

下一步是获取与这些相册相关的曲目.我这样做是通过稍微修改'base'查询.

(2) SELECT track.* FROM album 
LEFT JOIN track ON track.album_id = album.id 
WHERE album.id IN(?,?,?,?,?)
Run Code Online (Sandbox Code Playgroud)

现在,我有专辑和曲目.但是,我需要为曲目加载作曲家细节.由于几个原因,我不能与上面的查询一起做,所以我需要单独进行.

我能做的就是根据我所获得的曲目来查找作曲家,在那里我会使用曲目ID并根据这些曲目ID在编辑器表中查找作曲家.或者,我可以进一步修改"基本"查询,并再与作曲家表连接.然而; 这里有一个通用规则(关于性能),它很容易指出其中一个查询是有利的吗?我已经测试了一下,但是我已经做到了这么小的规模,我真的看不出有任何区别......

(3) SELECT composer.* FROM album 
LEFT JOIN track ON track.album_id = album.id
LEFT JOIN composer ON composer.track_id = track.id
WHERE album.id IN (?,?,?,?,?)
Run Code Online (Sandbox Code Playgroud)

...要么...

[get track ids from query (2)]

(4) SELECT composer.* FROM composer
WHERE composer.track_id IN (?,...);
Run Code Online (Sandbox Code Playgroud)

为了记录:我已经在所有条件和连接列上都有索引.

mysql performance

3
推荐指数
1
解决办法
4039
查看次数

如何解决 EclipseLink 的 (MOXy) '不支持获取属性“eclipselink.oxm.metadata-source”'?

我有以下一段代码,我主要根据 EclipseLink 网站上的教程将这些代码放在一起:

    Partner p = new Partner();
    p.setId(1);
    p.setKey("a");
    p.setName("this is the name");

    Map<String, Source> metadataSourceMap = new HashMap<String, Source>();
    metadataSourceMap.put("com.company.pas.entity.partner", new StreamSource("/com/company/pas/entity/mapping/partner-pojo2xml.xml"));
    Map<String, Object> properties = new HashMap<String, Object>();
    properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, metadataSourceMap);
    JAXBContext jaxbContext = JAXBContext.newInstance(new Class[] {Partner.class}, properties);
Run Code Online (Sandbox Code Playgroud)

当我尝试运行这段代码时,我得到的只是一个例外:

Exception in thread "main" javax.xml.bind.JAXBException: property "eclipselink.oxm.metadata-source" is not supported
    at com.sun.xml.internal.bind.v2.ContextFactory.createContext(ContextFactory.java:115)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:248)
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:235)
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:445)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:637)
Run Code Online (Sandbox Code Playgroud)

我没有在这里包含“映射文件”(partner-pojo2xml.xml),因为无论是否添加映射文件都会发生异常metaDataSourceMap

pom.xml 中的相关部分可以在下面找到。

<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>eclipselink</artifactId>
    <version>2.5.1</version>
</dependency> …
Run Code Online (Sandbox Code Playgroud)

eclipselink moxy

2
推荐指数
1
解决办法
1649
查看次数

为什么MySQL触发器变量不能处理特殊字符?

我有一个表,其中所有字段都设置为“utf8_general_ci”。表上有一个触发器,用于捕获数据更改并将其插入到“日志”表中。

\n\n

触发器有一个变量 (var_row_data),它存储更新行的旧数据,然后将该变量插入到日志表中。然而,每当触发变量中存储的数据包含特殊字符(例如\xc5\x82 和\xc5\x84)时,MySQL 就会以某种方式引发异常。

\n\n

我是否遗漏了有关触发变量及其编码的信息?连接使用 utf8,表使用 utf8,网页使用 utf8。简而言之; MySQL 可以很好地处理特殊字符,但是一旦触发器尝试存储特殊字符,一切都会出错。

\n\n

有人对这个有经验么?显然触发变量出了问题,但我只是不明白如何解决它。

\n\n

作为记录,这里是触发器:

\n\n
DROP TRIGGER IF EXISTS `SYM_ON_U_FOR_VRBLS_WBPRD`//\nCREATE TRIGGER `SYM_ON_U_FOR_VRBLS_WBPRD` AFTER UPDATE ON `variables`\n FOR EACH ROW begin\n                                  DECLARE var_row_data mediumtext;\n                                  DECLARE var_old_data mediumtext;\n                                  if 1=1 and @sync_triggers_disabled is null then\n                                    set var_row_data = concat(\n          if(new.`id` is null,\'\',concat(\'"\',cast(new.`id` as char),\'"\')),\',\',\n          if(new.`variable` is null,\'\',concat(\'"\',replace(replace(new.`variable`,\'\\\',\'\\\\\'),\'"\',\'\\"\'),\'"\')),\',\',\n          if(new.`value` is null,\'\',concat(\'"\',replace(replace(new.`value`,\'\\\',\'\\\\\'),\'"\',\'\\"\'),\'"\')));\n                                    set var_old_data = concat(\n          if(old.`id` is null,\'\',concat(\'"\',cast(old.`id` as char),\'"\')),\',\',\n          if(old.`variable` is null,\'\',concat(\'"\',replace(replace(old.`variable`,\'\\\',\'\\\\\'),\'"\',\'\\"\'),\'"\')),\',\',\n          if(old.`value` is null,\'\',concat(\'"\',replace(replace(old.`value`,\'\\\',\'\\\\\'),\'"\',\'\\"\'),\'"\')));\n                                    if 1=1 then \n …
Run Code Online (Sandbox Code Playgroud)

mysql encoding triggers utf-8

1
推荐指数
1
解决办法
3186
查看次数

为什么服务没有注入到控制器中?

我正在尝试 AdonisJS,但我一直在尝试将服务注入到控制器中。无论我尝试什么,hs构造函数参数VersionsController仍然存在undefined

我还尝试过用 注释构造VersionController函数@inject(['@ioc:Service/HashService']),但没有成功。我不确定@injectAdonis.js v5 是否是正确的方法。

如何正确地将服务类注入控制器?

/providers/AppProvider.ts

    import { ApplicationContract } from '@ioc:Adonis/Core/Application'
    import HashService from 'App/Services/HashService';
    
    export default class AppProvider {
        
        protected app: ApplicationContract;
        
        constructor(app: ApplicationContract) {
            this.app = app;
        }
    
        public register() {
            this.app.container.singleton('@ioc:Service/HashService', () => {
                return new HashService();
            });
        }
    
        public async boot() {
            // IoC container is ready
        }
    
        public async ready() {
            // App is ready
        }
    
    
        public async shutdown() { …
Run Code Online (Sandbox Code Playgroud)

adonis.js

1
推荐指数
1
解决办法
1205
查看次数