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) 我有一些代码,它们通过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)
为了记录:我已经在所有条件和连接列上都有索引.
我有以下一段代码,我主要根据 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) 我有一个表,其中所有字段都设置为“utf8_general_ci”。表上有一个触发器,用于捕获数据更改并将其插入到“日志”表中。
\n\n触发器有一个变量 (var_row_data),它存储更新行的旧数据,然后将该变量插入到日志表中。然而,每当触发变量中存储的数据包含特殊字符(例如\xc5\x82 和\xc5\x84)时,MySQL 就会以某种方式引发异常。
\n\n我是否遗漏了有关触发变量及其编码的信息?连接使用 utf8,表使用 utf8,网页使用 utf8。简而言之; MySQL 可以很好地处理特殊字符,但是一旦触发器尝试存储特殊字符,一切都会出错。
\n\n有人对这个有经验么?显然触发变量出了问题,但我只是不明白如何解决它。
\n\n作为记录,这里是触发器:
\n\nDROP 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) 我正在尝试 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) mysql ×2
adonis.js ×1
autowired ×1
eclipselink ×1
encoding ×1
moxy ×1
performance ×1
spring ×1
spring-boot ×1
triggers ×1
utf-8 ×1