小编Pas*_*wig的帖子

C#WebRequest.getResponse():400错误请求

我试图使用System.Web从服务器下载文件.它确实有效,但有些链接给我带来了麻烦.链接看起来像这样:

http://cdn.somesite.com/r1KH3Z%2FaMY6kLQ9Y4nVxYtlfrcewvKO9HLTCUBjU8IBAYnA3vzE1LGrkqMrR9Nh3jTMVFZzC7mxMBeNK5uY3nx5K0MjUaegM3crVpFNGk6a6TW6NJ3hnlvFuaugE65SQ4yM5754BM%2BLagqYvwvLAhG3DKU9SGUI54UAq3dwMDU%2BMl9lUO18hJF3OtzKiQfrC/the_file.ext
Run Code Online (Sandbox Code Playgroud)

代码看起来基本上是这样的:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(link);
WebResponse response = request.getResponse();
Run Code Online (Sandbox Code Playgroud)

getResponse()始终抛出异常(错误400错误请求).但是,我知道该链接有效,因为我可以使用Firefox下载该文件而不会出现问题.

我也尝试用Uri.UnescapeDataString(链接)解码链接,但该链接甚至不能在Firefox中工作.

其他链接以这种方式完美地工作..只是这些不起作用.

编辑:

好的,我发现了一些使用wireshark的东西:

如果我使用Firefox打开链接,则发送:

&ME3@"dM*PNyAo PA:]GET /r1KH3Z%2FaMY6kLQ9Y4nVxYp5DyNc49t5kJBybvjbcsJJZ0IUJBtBWCgri3zfTERQught6S8ws1a%2BCo0RS5w3KTmbL7i5yytRpn2QELEPUXZTGYWbAg5eyGO2yIIbmGOcFP41WdrFRFcfk4hAIyZ7rs4QgbudzcrJivrAaOTYkEnozqmdoSCCY8yb1i22YtEAV/epd_outpost_12adb.flv HTTP/1.1
Host: cdn.somesite.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20100101 Firefox/12.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Run Code Online (Sandbox Code Playgroud)

我认为只有第一行是问题,因为WebRequest.Create(link)解码了url:

&MEz.@!dM/nP9@~P>.GET /r1KH3Z/aMY6kLQ9Y4nVxYp5DyNc49t5kJBybvjbcsJJZ0IUJBtBWCgri3zfTERQught6S8ws1a%2BCo0RS5w3KTmbL7i5yytRpn2QELEPUXZTGYWbAg5eyGO2yIIbmGOcFP41WdrFRFcfk4hAIyZ7rs6Mmh1EsQQ4vJVYUwtbLBDNx9AwCHlWDfzfSWIHzaaIo/epd_outpost_12adb.flv HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20100101 Firefox/12.0
Host: cdn.somesite.com
Run Code Online (Sandbox Code Playgroud)

(%2F替换为/)

另一个编辑:

我发现Uri类自动解码url:Uri uri = new Uri(link); //链接未解码Debug.WriteLine(uri.ToString()); //链接在此解码.

我怎么能阻止这个?

在此先感谢您的帮助.

c# webrequest bad-request

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

HIbernate - 如何关闭多租户连接池?

我在hibernate中遇到麻烦而没有在多租户设置中关闭(hikari)连接池.这是hibernate session-factory配置:

<session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQL82Dialect</property>
    <property name="hibernate.multiTenancy">SCHEMA</property>
    <property name="hibernate.multi_tenant_connection_provider">foundation.hibernate.TaxonomyMultiTenantConnectionProvider</property>
    <property name="hibernate.jdbc.batch_size">100</property>
    <property name="hibernate.order_inserts">true</property>

    <property name="hibernate.hikari.dataSourceClassName">org.postgresql.ds.PGSimpleDataSource</property>
    <property name="hibernate.hikari.minimumIdle">50</property>
    <property name="hibernate.hikari.connectionTestQuery">SELECT 1</property>
    <property name="hibernate.hikari.maximumPoolSize">200</property>
    <property name="hibernate.hikari.idleTimeout">28000000</property>
    <property name="hibernate.hikari.maxLifetime">28000000</property>
    <property name="hibernate.hikari.connectionTimeout">10000</property>
    <property name="hibernate.hikari.dataSource.applicationName">Taxonomy Workbench</property>

    <property name="show_sql">true</property>
    <property name="format_sql">true</property>

    <mapping class="dal.models.DbProduct"/>
</session-factory>
Run Code Online (Sandbox Code Playgroud)

TaxonomyMultiTenantConnectionProvider的实现如下:

package foundation.hibernate;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import foundation.hibernate.TenantDoesNotExistException.TenantDoesNotExistException;
import org.hibernate.engine.config.spi.ConfigurationService;
import org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider;
import org.hibernate.service.spi.ServiceRegistryAwareService;
import org.hibernate.service.spi.ServiceRegistryImplementor;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

public class TaxonomyMultiTenantConnectionProvider implements MultiTenantConnectionProvider, ServiceRegistryAwareService, AutoCloseable {

    private HikariDataSource dataSource;

    @Override
    public void injectServices(ServiceRegistryImplementor serviceRegistry) { …
Run Code Online (Sandbox Code Playgroud)

java hibernate connection-pooling multi-tenant

6
推荐指数
0
解决办法
792
查看次数

实时聚合不是最新的

我正在经历实时聚合而不是实时更新。我有什么遗漏的吗?

2.4.2使用当前 docker 镜像的版本的可重现示例timescale/timescaledb:latest-pg12

CREATE TABLE data
(
    time  TIMESTAMPTZ      NOT NULL,
    value DOUBLE PRECISION NOT NULL
);

SELECT create_hypertable('data', 'time', chunk_time_interval => interval '1d');

INSERT INTO data (time, value)
VALUES ('2020-01-01', 100);

CREATE MATERIALIZED VIEW data_daily WITH (timescaledb.continuous)
AS
SELECT time_bucket('1 day', time) AS time,
       avg(value)                 AS avg,
       count(*)                   AS count
FROM data
GROUP BY 1;
ALTER MATERIALIZED VIEW data_daily SET (timescaledb.materialized_only = false);
Run Code Online (Sandbox Code Playgroud)

现在,当我运行时,SELECT * FROM data_daily我得到了预期的结果:

time, avg, count
2020-01-01 00:00:00.000000, 100, …
Run Code Online (Sandbox Code Playgroud)

real-time-data timescaledb continuous-aggregates

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

如何使用不同的配置文件覆盖特定于配置文件的属性?

我目前在spring boot中有以下配置设置:

application.properties

app.database.host=${DB_HOST}
app.database.port=${DB_PORT}
app.database.name=${DB_NAME}
app.database.user=${DB_USER}
app.database.password=${DB_PASSWORD}
app.database.schema=${DB_SCHEMA:public}
spring.datasource.url=jdbc:postgresql://${app.database.host}:${app.database.port}/${app.database.name}
spring.datasource.username=${app.database.user}
spring.datasource.password=${app.database.password}
spring.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
Run Code Online (Sandbox Code Playgroud)

application-local-dev.properties:

app.database.host=${DB_HOST:localhost}
app.database.port=${DB_PORT:5432}
app.database.name=${DB_NAME:db_name}
app.database.user=${DB_USER:root}
app.database.password=${DB_PASSWORD:root}
app.database.schema=${DB_SCHEMA:public}
Run Code Online (Sandbox Code Playgroud)

application-load-fixtures.properties:

spring.profiles.include=local-dev
spring.profiles.active=load-fixtures,local-dev
app.database.name=${DB_NAME:db_name}_fixtures
Run Code Online (Sandbox Code Playgroud)

这里的想法是,在默认模式下启动应用程序时,如果缺少数据库名称等关键属性,它将无法启动.它们应该通过环境变量传递.

出于开发目的,在设置项目时这是不必要的开销,因为我们有一个具有静态凭据的docker容器,并且我想将它们作为默认值提供.因此,我创建了一个配置文件local-dev,它将使用默认值来连接到我们的docker数据库,并且仍然能够通过环境变量覆盖它们,以防有人需要.直到这里,一切正常.

但是现在,我们还有一个用于将数据夹加载到数据库中的配置文件(删除所有表,重新创建并用数据填充它们).出于显而易见的原因,我想确保无法在任意数据库上执行此操作,因此我创建了一个load-fixtures应继承所有属性的配置文件local-dev并覆盖数据库名称.但是,这种方法似乎是错误的.我可以在spring日志中看到配置文件已正确加载:

2017-11-16 13:32:11.508  INFO 23943 --- [           main] Main:
The following profiles are active: load-fixtures,local-dev
Run Code Online (Sandbox Code Playgroud)

但它仍然使用local-dev配置文件提供的数据库名称.

当我删除该行

app.database.name=${DB_NAME:db_name}
Run Code Online (Sandbox Code Playgroud)

local-dev配置文件,它的工作原理.

但是,我想要避免的是必须向两者添加新属性,local-dev并且load-fixtures每当我们向项目添加新的配置属性时.

我知道配置文件特定属性优先于非配置文件特定属性.此外,非默认位置属性优先于默认位置的属性.但是在这里,两个配置文件(local-devload-fixtures)都在同一个位置,它们也都是特定于配置文件的.

有什么方法可以解决这个问题?

提前致谢!

spring-boot

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