在我的应用程序中,我使用了几个配置文件来使某些bean符合自动装配的条件.我缺少的是当某个配置文件不活动时,可以使豆符合自动装配的条件.
我想到的最好的方法是这样的:
X
为配置文件激活not_X
.在我的情况下,如果我想要一个bean在配置文件B不活动时有资格进行自动装配,我会注释它们@Profile("not_B")
然而,该解决方案需要关于所有可能的配置文件的前期知识.
你能想到更好的解决方案吗?
这可能很简单,但我不是SQL高手,所以我迷路了.我知道sql接受你的查询并按特定顺序执行它,我相信这个查询不起作用的原因:
select * from purchaseorders
where IsNumeric(purchase_order_number) = 1
and cast(purchase_order_number as int) >= 7
Run Code Online (Sandbox Code Playgroud)
最大的purchar_order_number字段是数字,但我们最近引入了字母数字字段.我想要获得的数据是查看"7"是否大于最高数字purchase_order_number.
Numeric()函数可以很好地过滤掉字母数字字段,但是进行后续的强制转换比较会抛出此错误:
Conversion failed when converting the nvarchar value '124-4356AB' to data type int.
Run Code Online (Sandbox Code Playgroud)
我不是在问这个错误意味着什么,这很明显.我问是否有办法在单个查询中完成我想要的,最好是因为ORM约束而在where子句中.
Java规范保证原始变量赋值总是原子的(期望long
和双精度)types
.
相反,对应于着名的增量操作的获取和添加操作i++
将是非原子的,因为导致读 - 修改 - 写操作.
假设这段代码:
public void assign(int b) {
int a = b;
}
Run Code Online (Sandbox Code Playgroud)
生成的字节码是:
public void assign(int);
Code:
0: iload_1
1: istore_2
2: return
Run Code Online (Sandbox Code Playgroud)
因此,我们看到赋值由两个步骤组成(加载和存储).
假设这段代码:
public void assign(int b) {
int i = b++;
}
Run Code Online (Sandbox Code Playgroud)
字节码:
public void assign(int);
Code:
0: iload_1
1: iinc 1, 1 //extra step here regarding the previous sample
4: istore_2
5: return
Run Code Online (Sandbox Code Playgroud)
知道X86处理器可以(至少是现代处理器)以原子方式操作增量操作,如上所述:
在计算机科学中,fetch-and-add CPU指令是一种特殊指令,它以原子方式修改存储器位置的内容.它用于在多处理器系统中实现互斥和并发算法,信号量的泛化.
因此,第一个问题:尽管字节码需要两个步骤(加载和存储),但是Java依赖于这样的事实:赋值操作是一个操作,无论处理器的体系结构如何都始终以原子方式执行,因此可以确保永久原子性(对于原始赋值) )在其规格?
第二个问题:用非常现代的X86处理器确认并且不跨不同架构共享编译代码是不对的,根本不需要同步 …
我正在使用一个称为ASM的字节码库来改变类文件,然后我想将每个类文件写回一个jar文件而不是一个充满类文件的文件夹.我这样做是通过运行此代码:
当ZipException因为不是预期的大小而抛出时,我的问题就出现了
java.util.zip.ZipException: invalid entry compressed size (expected 695 but got 693 bytes)
at java.util.zip.ZipOutputStream.closeEntry(Unknown Source)
at org.steinburg.client.accessor.Accessor.accessJar(Accessor.java:64)
at org.steinburg.client.accessor.Accessor.<init>(Accessor.java:41)
at Loader.main(Loader.java:5)
package org.steinburg.client.accessor;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.jar.JarOutputStream;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassWriter;
public class Accessor {
private String input;
private File inFile;
private JarEntry jarEntry;
private JarFile jarFile;
private Enumeration<JarEntry> entries;
private InputStream is;
private String out;
private File outFile;
private FileOutputStream fos;
private JarOutputStream jos;
private byte[] …
Run Code Online (Sandbox Code Playgroud)